Утилита sed#

Описание#

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

Внимание

Чтобы внести изменения в исходный файл без отправки в стандартный вывод, используйте опцию -i.

Синтаксис утилиты:

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

Где:

  • <options> - опции;

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

  • <file> - файл.

Опции#

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

Опции sed#

Опция

Описание

-e <script>

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

-i <suffix>

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

-n

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

-r

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

-s

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

Команды#

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

Команды sed#

Команда

Описание

=

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

#

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

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
    
  • Для замены вхождения слова root на test в исходном файле /etc/group без отображения в стандартном выводе:

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

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

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

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

man sed

Или:

sed --help