Удалить строки с помощью 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
Удалить первую строку
Это просто. Просто используйте 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
Удалить все строки, кроме указанных строк
Команда 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, я рекомендую это руководство, чтобы начать работу с ним.