Поиск по сайту:

Удалить строки с помощью Sed [11 примеров]


Некоторые распространенные примеры удаления строк с помощью команды sed.

Удалить строки с помощью команды sed довольно просто, если вы понимаете суть.

И хитрость в том, что в основном он следует этому шаблону:

sed 'nd' filename

Думайте об этом как о «удалить n».

Я знаю, что это не дает много информации, но это будет более понятно, когда вы увидите примеры команд sed для удаления строк, которыми я собираюсь поделиться в этой статье.

В примерах я буду использовать этот пример файла под названием lines.txt. За этим текстовым контентом будет легче следить.

Line number 1
Line number 2
Line number 3
Line number 4
Line number 5
Line number 6
Line number 7
Line number 8
Line number 9
Line number 10
🚧
Делюсь примерами удаления строк, но показывает это только на экране, файл не меняется. Если вы хотите изменить файл, используйте sed -i вместо sed в упомянутых примерах. Но я предлагаю либо сделать резервную копию файла, либо убедиться, что вы удаляете нужные строки.

Удалить первую строку

Это просто. Просто используйте 1d следующим образом:

sed '1d' filename

А вот пример команды в действии:

abhishek@LHB:~$ sed '1d' lines.txt 
Line number 2
Line number 3
Line number 4
Line number 5
Line number 6
Line number 7
Line number 8
Line number 9
Line number 10

Удалить определенный номер строки

Чтобы удалить n-ю строку файла, просто укажите номер следующим образом:

sed 'nd' filename

Допустим, я удаляю четвертую строку в своем примере:

abhishek@LHB:~$ sed '4d' lines.txt 
Line number 1
Line number 2
Line number 3
Line number 5
Line number 6
Line number 7
Line number 8
Line number 9
Line number 10

Если число превышает общее количество строк в файле, ни одна строка не удаляется.

Удалить последнюю строку

В предыдущих примерах. вы указали номер строки. Удалить первую строку было проще, если вы использовали 1d, но вы не всегда будете знать номер последней строки. Вы наверняка можете получить эту информацию, но есть гораздо более простой способ удалить последнюю строку с помощью sed:

sed '$d' filename

Здесь $ представляет последнюю строку, а d означает удаление (и вы это уже знаете).

abhishek@LHB:~$ sed '$d' lines.txt 
Line number 1
Line number 2
Line number 3
Line number 4
Line number 5
Line number 6
Line number 7
Line number 8
Line number 9

Удалить диапазон строк

Если вы хотите удалить определенный диапазон строк из текстового файла, это можно легко сделать с помощью sed следующим образом.

Чтобы удалить строки, начинающиеся со строки с номером x и до строки с номером y, используйте команду sed следующим образом:

sed 'x,yd' filename

В примере ниже команда удаляет строку с 4 по 6:

abhishek@LHB:~$ sed '4,6d' lines.txt 
Line number 1
Line number 2
Line number 3
Line number 7
Line number 8
Line number 9
Line number 10

Излишне говорить, что сначала следует использовать меньшее число, а потом большее.

Удалить выборочные строки

Не все можно сгруппировать по диапазонам. Что делать, если вы хотите удалить несколько выбранных строк? Вы можете использовать их номера строк следующим образом:

sed 'xd,yd,zd' filename

Допустим, я хочу удалить строки 5,7 и 9:

abhishek@LHB:~$ sed '5d;7d;9d' lines.txt 
Line number 1
Line number 2
Line number 3
Line number 4
Line number 6
Line number 8
Line number 10
💡
Вы также можете смешивать диапазон строк и номера строк. Например, чтобы удалить строки со 2 по 5 и строку номер 7, используйте: sed '2,4d;7d' имя файла.

Удалить все строки, кроме указанных строк

Команда Sed также поддерживает отрицание, и вы можете использовать ее для удаления всех строк, кроме N-й строки или заданного диапазона строк.

Чтобы удалить все строки, кроме первой, используйте:

sed '1!d' filename

Чтобы удалить все строки, кроме последней, используйте:

sed '$!d' filename

Чтобы удалить все строки, кроме 5-й, используйте:

sed '5!d' filename

Чтобы удалить все строки, кроме строк с 4 по 6, используйте:

sed '4,6!d' filename

Удалить все пустые строки

Чтобы удалить все пустые строки, используйте команду sed следующим образом:

sed '/^$/d' filename

Имейте в виду, что если строка содержит только один пробел, она не будет удалена с помощью приведенной выше команды.

Удалить все строки, начинающиеся или заканчивающиеся определенной буквой

Вы можете добавить в игру простое регулярное выражение и использовать его для удаления строк на основе шаблона.

Например, чтобы удалить все строки, начинающиеся с буквы L, используйте:

sed '/^L/d' filename

Да, это чувствительно к регистру.

Аналогичным образом вы можете удалить все строки, заканчивающиеся определенным символом/словом:

sed '/L$/d' filename

Удалить все строки, содержащие слово или образец

На самом деле, приведенные выше несколько примеров можно сгруппировать в этот, потому что все они удаляют строки, соответствующие шаблону.

sed '/pattern/d' filename

В нашем примере давайте удалим строки, содержащие Строка номер 1:

abhishek@LHB:~$ sed '/Line number 1/d' lines.txt 
Line number 2
Line number 3
Line number 4
Line number 5
Line number 6
Line number 7
Line number 8
Line number 9

Возможности безграничны. Как только вы поймете закономерность, все станет легко.

Если вы новичок в SED, я рекомендую это руководство, чтобы начать работу с ним.

Статьи по данной тематике: