sed -i.bak -n -e 'cmd' -f cmdfile file1 file2...
По умолчанию, результат обработки выдаётся на стандартный вывод.
-i[ext]
- редактирование файлов "на месте". Каждый файл обрабатывается отдельно. Результат сохраняется в тот же файл. Старое содержимое сохраняется в файле, к имени которого приписана строка ext.-n
- отмена автопечати обработанных строк. Для вывода строк необходимо явно указывать в скрипте команду p
или аналогичную.-e cmd
- задание скрипта cmd в командной строке-s cmdfile
- чтение скрипта из файла cmdfilefile1 file2...
- список входных файлов. При его отсутствии обрабатывается стандартный ввод.[addr1 [,addr2]] C [options]
Адреса определяют строки, к которым должна быть применена команда. Если адрес не указан, то команда применяется ко всем строкам. Если указаны два адреса, то команда применяется ко всем строкам от addr1 до addr2 включительно. Адреса могут быть номерами строк (в том числе символ $ в качестве номера последней строки), регулярными выражениями в формате /re/
или \%re%
(в этом случае % может быть заменён на любой символ). Запись addr! означает, что команду надо применять ко всем адресам, кроме указанного.
Команда кодируется одним символом. Опции зависят от типа выполняемой команды. Чтобы применить к одному адресу несколько команд, они могут быть сгруппированы с помощью фигурных скобок.
В файле отдельные команды могут располагаться в отдельных строках. При запуске однострочных программ команды отделяются точкой с запятой или передаются в виде последовательности опций -e 'cmd'
sed '1d;3d;s/abc/cde/'
sed -e '1d' -e '3,5d' -e '/start/{n;n;s/abc/cde/}'
Редактор sed оперирует тремя объектами: входной поток строк, буфер строк (pattern space), буфер хранения (hold space), выходной поток. ( pattern space также переводят как "пространство регулярных выражений")
В цикле производятся следующие действия:
q # если не отключена автопечать, то вытолкнуть буфер строк в выходной поток,
# завершить главный цикл
n # если не отключена автопечать, то вытолкнуть буфер строк в выходной поток,
# загрузить из входного потока в буфер строк следующую строку,
# продолжить выполнять команды уже с новым содержимым
s/from\(.*\)/to\1/gi # замена регулярного выражения в буфере строк
y/abc/cde/ # Замена парных символов в буфере строк. Аналог команды tr.
text - последовательность строк, разделяемых комбинацией символов \<перевод строки>.
i text # вывести в выходной поток указанный текст
a text # вытолкнуть буфер строк в выходной поток,
# затем вывести в выходной поток указанный текст
c text # замена строк. Удалить строки в диапазоне из входного потока,
# затем вывести в выходной поток указанный текст
d # очистить буфер строк и перейти на начало главного цикла
D # удалить первую строку в буфер строк
# и перейти на начало главного цикла без считывания новой строки
N # добавить в буфер строк перевод строки и следующую строку из входного потока
g # скопировать буфер хранения в буфер строк
G # добавить в буфер строк перевод строки и содержимое буфера хранения
h # скопировать буфер строк в буфер хранения
H # добавить в буфер хранения перевод строки и содержимое буфера строк
x # поменять местами буфер строк и буфер хранения
Если буфер хранения пуст, то команда G
добавляет в буфер строк только перевод строки.
Опция -n
отключает автоматический вывод результата в выходной поток. В этом случае команды печати надо указывать явно.
p # скопировать (не очищая) буфер строк в выходной поток
P # скопировать первую строку буфера строк в выходной поток
l # скопировать буфер строк в выходной поток,
# предварительно пометив конец строки знаком $,
# и заменив непечатаемые символы их кодами в стиле языка Си
= # вывести номер текущей строки + перевод строки в выходной поток
r filename # вывести содержимое файла в выходной поток перед началом следующего цикла.
w filename # записать буфер строк в конец файла. При запуске скрипта файл обнуляется.
: LABEL # метка
b [LABEL] # безусловный переход на метку, а при ее отсутствии на начало главного цикла
t [LABEL] # переход на метку в случае успешного выполнения хотя бы одной команды 's'.
# При отсутствии метки переход на начало главного цикла