Шрифт:
$ sed 'команды' входной_файл > выходной_файл
10.2.2. Синтаксис команд
Общий синтаксис команд редактора sed таков:
[адрес1 [, адрес2] ] [ ! ] команда [аргументы]
Команда состоит из одной буквы или одного символа (Список основных команд представлен ниже). Аргументы требуются лишь нескольким командам, в частности, команде s. Элементы, представленные в квадратных скобках, являются необязательными, а сами скобки набирать не нужно.
Просмотр входного файла по умолчанию начинается с первой строки. Существует два способа адресации строк:
1. По номерам.
2. С помощью регулярных выражений (о них рассказывалось в главе 7).
В команде может быть указано два адреса, один адрес или ни одного адреса. В следующей таблице описаны все возможные правила отбора строк в зависимости от того, сколько компонентов адреса задано (табл. 10.1).
Таблица 10.1. Правила отбора строк в редакторе sed
Адрес
Отбираемые строки
нет адреса
Все строки входного файла
X
Строка с номером x
х, у
Все строки с номерами в диапазоне от x до y
/шаблон/
Все строки, соответствующие шаблону
/шаблон1/, /шаблон 2/
Группа строк, начиная от строки, соответствующей первому шаблону, и заканчивая строкой, которая соответствует второму шаблону; подобных групп во входном файле может быть несколько
/шаблон/,х
Группа строк, начиная от строки, соответствующей шаблону, и заканчивая строкой с указанным номером
x,/шаблон/
Группа строк, начиная от строки с указанным номером и заканчивая строкой, соответствующей шаблону
!
Все строки, не соответствующие заданному адресу
$
Последняя строка входного файла
Некоторые команды, в частности, a, i, r, q и =, требуют указания только одного адреса.
10.2.3. Основные команды редактирования
Ниже представлен список основных команд, имеющихся в редакторе sed (табл. 10.2).
Таблица 10.2. Основные команды sed
p
Вывод адресуемых строк
ж
Вывод номеров адресуемых строк
а
Добавление заданного текста после каждой адресуемой строки
i
Вставка заданного текста перед каждой' адресуемой строкой
с
Замена адресуемого текстового блока заданным текстом
d
Удаление адресуемых строк
s
Замена указанного шаблона заданным текстом в каждой адресуемой строке
w
Добавление адресуемых строк в указанный файл
r
Чтение текста из указанного файла и добавление его после каждой адресуемой строки
q
Завершение работы после того, как достигнута адресуемая строка
l
Вывод адресуемых строк с отображением непечатаемых символов в виде ASCII-
кодов и переносом длинных строк
С помощью фигурных скобок можно объединить несколько команд в группу. Возможны два синтаксиса группировки:
[адрес1[, адрес2]]{ команда 1
командаN
}
или
[адрес1[,адрес2]] {команда1; …командаN; }
В первом случае каждая команда записывается в отдельной строке, а разделителем команд является символ новой строки. Во втором случае команды записываются последовательно, отделяясь друг от друга точкой с запятой, которая ставится также после завершающей команды.
Ниже приведен текстовый файл quote.txt, который используется во многих примерах данной главы:
$ cat quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P. Neave was in attendance.
10.3. Регулярные выражения
Редактор sed распознает базовые регулярные выражения, которые мы уже рассматривали в главе 7. Дополнительные особенности появляются только в шаблонах поиска и замены в команде s. С помощью операторов \ ( и \) можно сохранить до девяти шаблонов поиска во временном буфере, с тем чтобы в шаблоне замены обратиться к ним с помощью оператора \n, где п — номер сохраненного шаблона. Метасимвол & позволяет в шаблоне замены сослаться на фрагмент строки, соответствующий шаблону поиска.