Sed — это встроенный в Linux инструмент для работы с текстом. Термин sed означает «редактор потока». Несмотря на название, sed сам по себе не является текстовым редактором. Вместо этого он принимает текст в качестве входных данных, выполняет различные модификации текста в соответствии с инструкциями и распечатывает выходные данные.
Эта статья продемонстрирует, как использовать sed для удаления строки из текста.
Sed в Linux
Полное имя sed дает нам представление о методе его работы. Sed принимает вводимый текст как «поток». Текст может поступать откуда угодно — из текстового файла или стандартного вывода (STDOUT). После ввода данных sed работает с ним построчно.
Для демонстрации я сгенерировал простой текстовый файл.
$ cat dummy.txt
Удаление строки с помощью sed
Чтобы удалить строку, мы воспользуемся командой sed «d». Обратите внимание, что вы должны объявить, какую строку нужно удалить. В противном случае sed удалит все строки.
Удалить одну строку
Следующая команда sed удалит первую строку текста.
$ sed '1d' dummy.txt
В основном, чтобы удалить строку, вам нужен номер строки целевой строки. Удалим строку 5.
$ sed '5d' dummy.txt
Чтобы удалить последнюю строку текстового файла, вместо ручного вычисления номера строки используйте «$».
$ sed '$d' dummy.txt
Удалить диапазон строки
Sed может удалить ряд строк. Здесь минимальное значение строки равно 1, а максимальное значение строки — 5. Чтобы объявить диапазон, мы используем запятую (,).
$ sed '1,5d' dummy.txt
Удалить несколько строк
Что, если строки, которые вы хотите удалить, не находятся в фиксированном диапазоне? Взгляните на следующую команду sed. Обратите внимание, что мы используем точку с запятой (;) в качестве разделителя. По сути, каждый параметр с разделителями представляет собой отдельную команду sed.
$ sed '1d; 2d; 3d; $d' dummy.txt
Удалить все строки, кроме указанного диапазона
В следующем примере sed сохранит только строки, описанные в диапазоне. Здесь, «!» — оператор отрицания, указывающий sed сохранить определенные строки.
$ sed '2,4! d' dummy.txt
Удалить пустые строки
Если в тексте есть несколько пустых или пустых строк, следующая команда sed удалит их все.
$ sed '/^$/d' dummy.txt
Удалить линии по шаблону
Sed может искать определенный узор и выполнять указанные действия на линии. Мы можем использовать эту функцию для удаления определенных строк, соответствующих шаблону.
Давайте посмотрим на следующую демонстрацию. Sed удалит любую строку, содержащую строку «the».
$ sed '/the/d' dummy.txt
Мы также можем описать несколько строк для поиска. Каждая строка разделяется символом «\|».
$ sed '/brown\|the/d' dummy.txt
Удалить строки, начинающиеся с определенного символа
Чтобы обозначить начало строки, мы будем использовать символ каретки (^).
Следующая команда sed удалит все строки, начинающиеся с цифры. Здесь группа символов «[:digit:]» описывает все цифры (0–9).
$ sed '/^[[:digit:]]/d' dummy.txt
Мы также можем описать несколько символов для действительного совпадения. В следующем примере будут найдены все строки, начинающиеся с «t» и «b».
$ sed '/^[tb]/d' dummy.txt
В следующем примере показано, как удалить все строки, начинающиеся с символа верхнего регистра. Здесь мы используем группу символов верхнего регистра «[: upper:]».
$ sed '/^[[:upper:]]/d' dummy.txt
Если целевые строки содержат символы нижнего регистра в начале, используйте группу символов нижнего регистра «[: lower:]».
$ sed '/^[[:lower:]]/d' dummy.txt[/
Удалить строки, заканчивающиеся определенным символом
Чтобы обозначить конец строки, мы можем использовать символ «$». Он описывает совпадение с последним вхождением шаблона.
В следующем примере sed удалит строки, заканчивающиеся на «e».
$ sed '/e$/d' dummy.txt
Попробуем поискать по нескольким символам.
$ sed '/[en]$/d' dummy.txt
Удаление строк, соответствующих шаблону, и следующей строки
Мы уже продемонстрировали, как удалить строку, если шаблон совпадает. Мы также можем расширить и удалить следующую строку.
Ознакомьтесь со следующей командой sed.
$ sed '/the/{N;d;}' dummy.txt
Sed будет соответствовать строке, содержащей «the», и также удалит следующую строку.
Удаление строки от совпадения с шаблоном до конца
Мы можем расширить предыдущий пример, чтобы приказать sed удалить все строки, начиная с первого совпадения шаблона.
$ sed '/fox/,$d' dummy.txt
Здесь sed удалит строку, которая соответствует шаблону «первая» и все последующие строки.
Последняя мысль
Sed — простой инструмент. Однако он может творить чудеса благодаря поддержке регулярных выражений. Sed также легко интегрируется в различные скрипты.
Это было всего лишь краткое руководство, демонстрирующее одну из функций sed — удаление строк. С помощью sed вы можете делать множество других вещей.
Удачных вычислений!