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, где п — номер сохраненного шаблона. Метасимвол & позволяет в шаблоне замены сослаться на фрагмент строки, соответствующий шаблону поиска.
10.4. Вывод строк (команда p)
Рассмотрим, как в редакторе sed осуществляется поиск строк и вывод их на экран.
10.4.1. Отображение строки по номеру
Команда p (print) имеет такой формат:
[адрес1[,адрес2]]p
Для отображения строки входного файла достаточно указать ее номер, например:
$ sed '2р' quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
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.
Что было сделано неправильно? Ведь требовалось отобразить только строку номер 2, однако в результате были выведены на экран все строки файла, причем вторая строка — дважды. Причина подобного поведения заключается в том, что по умолчанию редактор sed отображает каждую просматриваемую строку. Чтобы избежать этого, воспользуемся опцией -n:
$ sed -n '2р' quote.txt
It was an evening of splendid music and company.
10.4.2. Отображение строк из заданного диапазона
Предположим, требуется вывести строки с номерами от 1 до 3. В этом случае следует указать два адреса, разделенные запятой:
$ sed -n '1,3p' 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.
10.4.3. Поиск строк, соответствующих шаблону
В следующем примере показано, как найти строку, содержащую слово "Neave":
$ sed -n '/Neave/p' quote.txt
The local nurse Miss P. Neave was in attendance.
10.4.4. Поиск пo шаблону и номеру строки
Если адрес представлен в виде шаблона, редактор sed находит все строки, соответствующие этому шаблону. Как можно уточнить местонахождение строки? Рассмотрим пример. Предположим, требуется найти слово "The" в последней строке файла quote.txt. Если воспользоваться поиском по шаблону, то будет получено две строки:
$ sed -n '/The/p' quote.txt
The honeysuckle band played‑all night long for only $90.
The local nurse Miss P. Neave was in attendance.
Чтобы остановить свой выбор на последней строке, следует указать ее номер перед шаблоном:
$ sed -n '4,/The/p' quote.txt
The local nurse Miss P. Neave was in attendance.
10.4.5. Поиск специальных символов
Если требуется найти строку, содержащую символ '$', который в редакторе sed имеет специальное назначение, следует защитить этот символ от интерпретации с помощью обратной косой черты, как показано ниже:
$ sed -n /\$/р' quote.txt
The honeysuckle band played all night long for only $90.
10.4.6. Поиск первой строки
Для вывода первой строки входного файла достаточно указать ее номер:
$ sed -n '1р' quote.txt
The honeysuckle band played all night long for only $90.
10.4.7. Поиск последней строки
Чтобы сослаться на последнюю строку входного файла, воспользуйтесь метасимволом '$':
$ sed -n '$p' quote.txt
The local nurse Miss P. Neave was in attendance.
10.4.8. Отображение всего файла
Если требуется отобразить весь файл, задайте диапазон строк от первой до последней:
$ sed -n '1,$p' 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.5. Вывод номеров строк (команда =)
Команда = имеет следующий формат:
[адрес]=
Она предназначена для вывода номера строки, соответствующей заданному адресу. Рассмотрим пример:
$ sed '/music/=' quote.txt
The honeysuckle band played all night long for only $90.
2
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.