Утилита sed#

Утилита sed - это потоковый редактор, работающий по принципу замены. Используется для преобразований текста во входном потоке (файле или входных данных в конвейере) - можно использовать для поиска, вставки, замены и удаления фрагментов в файле, не открывая его.

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

Синтаксис sed:

sed <options> <script/command> <file>

Где:

  • <options> - опции;

  • <script/command> - скрипт/команда;

  • <file> - файл.

Часто используемые опции утилиты представлены в таблице ниже.

Опция

Описание

-e <script>

Добавление скрипта в выполняемые команды

-i <suffix>

Редактирование файлов на месте (создание резервной копии, если указано расширение - суффикс)

-n

Отключение автоматического вывода; по умолчанию sed после прохождения каждого цикла сценария распечатывает обрабатываемую область шаблона

-r

Использование расширенных регулярных выражений в скрипте

-s

Обработка файлов как отдельных единиц, а не как единого непрерывного потока данных

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

Команда

Описание

=

Вывод номера текущей строки

#

Комментарий, не выполняется

a \<text>

Добавление текста, в котором каждое вхождение новой строки начинается со знака \

g

Замена содержимого буфера шаблона данными из дополнительного буфера

q

Немедленный выход из сценария sed без дальнейшей обработки любого ввода, за исключением автовывода, если он не отключен

r <file_name>

Добавление текста, прочитанного из указанного файла

p

Вывод текущей области шаблона

s

Сопоставление и замена

d

Очистка буфера шаблона и запуск следующей итерации цикла

Примеры использования#

  • Для отображения из файла /etc/group строки с пятой по десятую введите команду:

    sed -n '5,10p' /etc/group
    
  • Для замены вхождения слова root на test в файле /etc/group и отображения в стандартном выводе введите команду:

    sed 's/root/test/g' /etc/group
    
  • Для замены в каждой строке файла testfile.txt слова test на слово testword во втором вхождении введите команду:

    sed 's/test/testword/2' testfile.txt
    

    Вхождения, которые нужно заменить, обозначаются с помощью флагов /1, /2 и т.д.