Введение
При работе с текстовыми файлами в Linux часто требуется автоматически изменять их, не открывая интерактивный текстовый редактор. Например, может понадобиться удалить заголовок из CSV-файла, убрать пустые строки или извлечь определённый диапазон строк из файла журнала.
Для таких задач используется sed (потоковый редактор).
sed — мощный неинтерактивный текстовый редактор. Он читает данные из файла или конвейера, выполняет операции над каждой строкой и выводит результат. Эта модель «прочитать, преобразовать, вывести» — классический подход Unix, который особенно хорошо подходит для конвейеров.
Именно поэтому sed называют потоковым редактором. Он предназначен для работы с проходящим через него текстом, а не только с файлами, открытыми в полноэкранном редакторе. Поэтому sed естественно использовать в конвейерах оболочки и сценариях автоматизации.
В этой лабораторной работе вы научитесь:
- Удалять строки (
d): убирать ненужные заголовки или комментарии. - Удалять пустые строки: использовать регулярные выражения для фильтрации пустых строк.
- Вставлять текст (
i): добавлять в файл новые строки. - Выводить строки (
p): извлекать определённые диапазоны строк.
Удаление строк
Сначала просмотрите пример файла.
cat /home/labex/project/data.csv
Вы увидите, что в его начале находятся две строки комментариев, начинающиеся с #. Эти строки нужно удалить.
Для удаления строк в sed используется команда d.
1dудаляет строку 1.1,2dудаляет строки с 1 по 2.
Адресация строк по номерам — одна из основных идей sed. Адрес указывает sed, к какой строке или диапазону строк нужно применить команду, а команда редактирования определяет, что именно следует сделать.
Выполните следующую команду, чтобы предварительно просмотреть результат удаления, не изменяя файл:
sed '1,2d' data.csv
В выводе содержимое файла показано без первых двух строк. Однако снова проверьте содержимое файла:
cat data.csv
Эти строки всё ещё находятся в файле. По умолчанию sed отправляет результат на экран, то есть в стандартный вывод, и не изменяет исходный файл. Это защищает файл от случайных изменений.
Чтобы применить изменения непосредственно к файлу, используйте параметр -i:
sed -i '1,2d' data.csv
Проверьте изменения:
cat data.csv
Теперь строки заголовка удалены из файла без возможности восстановления.
Удаление пустых строк
В файле всё ещё есть пустые строки, нарушающие структуру данных. В обработанных файлах данных такие строки обычно не нужны.
Чтобы удалить их, объедините команду удаления (d) с регулярным выражением (Regex).
^соответствует началу строки.$соответствует концу строки.^$соответствует строке, которая начинается и сразу заканчивается, то есть пустой строке.
Это хороший пример сочетания в sed двух уровней: шаблона адреса и действия редактирования. Шаблон /^$/ выбирает подходящие строки, а d удаляет выбранные строки.
Команда /^$/d указывает sed: «удалить любую строку, соответствующую шаблону пустой строки».
Выполните команду, чтобы удалить пустые строки непосредственно из файла:
sed -i '/^$/d' data.csv
Проверьте результат:
cat data.csv
Теперь файл должен содержать компактный список данных без пропусков между строками.
Вставка текста
Теперь, когда ненужные комментарии удалены, добавим в файл заголовок с классификацией.
Команда i (Insert) добавляет текст перед указанной строкой.
1i TextвставляетTextперед строкой 1.
Команда a (Append) добавляет текст после указанной строки.
1a TextвставляетTextпосле строки 1.
Наряду с удалением и заменой команды i и a показывают, что возможности sed не ограничиваются заменой текста. По мере прохождения строк через редактор он может изменять поток: удалять, добавлять и выбирать строки.
Выполните следующую команду, чтобы вставить Company Confidential в самое начало файла:
sed -i '1i Company Confidential' data.csv
Проверьте содержимое файла:
cat data.csv
Новая строка вставлена в начало, поэтому все остальные строки сместились вниз.
Вывод определённых строк
Иногда файл не нужно изменять — требуется только извлечь из него определённые строки. В таком режиме sed может работать как более гибкая версия head или tail.
По умолчанию sed выводит каждую обрабатываемую строку. Чтобы вывести только определённые строки, выполните два действия:
- Используйте параметр
-n, чтобы отключить автоматический вывод. - Используйте команду
p, чтобы явно вывести нужные строки.
Без -n команда sed сначала автоматически вывела бы каждую строку, а затем повторно вывела выбранные строки при выполнении p. Это часто сбивает начинающих с толку. Параметр -n отключает поведение по умолчанию, поэтому команда выводит только указанные вами строки.
Чтобы вывести строки с 5 по 10, выполните:
sed -n '5,10p' data.csv
Чтобы вывести только последнюю строку, используйте символ $, обозначающий конец файла:
sed -n '$p' data.csv
Это особенно полезно при анализе больших файлов журналов, когда нужно просмотреть только определённый фрагмент.
Итоги
В этой лабораторной работе вы изучили основы потокового редактирования с помощью sed:
- Удаление (
d): удаление определённых строк (1,2d) или строк, соответствующих шаблону (/^$/d). - Вставка (
i): добавление текста в поток файла в определённых местах. - Вывод (
-n ... p): отключение вывода по умолчанию и вывод только выбранных строк. - Редактирование непосредственно в файле (
-i): изменение файла вместо простого вывода результата на экран.
sed — важный инструмент для автоматической обработки текста. Его широко используют в сценариях оболочки для управления конфигурацией и анализа журналов.



