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.
В данном случае отображается весь файл, причем перед строкой, содержащей слово "music", выводится ее номер. Из этого можно сделать заключение, что команда=выполняется перед тем, как текущая строка будет выведена на экран.
Если же требуется узнать только номер строки, задайте опцию -n:
$ sed -n '/music/=' quote.txt
2
Можно также отобразить и строку, и ее номер. Для этого следует воспользоваться опцией -e, позволяющей указать несколько команд подряд. Первая команда выводит строку, в которой найдено совпадение с шаблоном, а вторая — номер этой строки:
$ sed -n -e '/music/p' -e '/music/=' quote.txt
It was an evening of splendid music and company. 2
10.6. Добавление текста (команда а)
Для добавления текста предназначена команда a (append), которая вставляет одну или несколько строк текста после адресуемой строки. Формат команды таков:
[адрес]a\
текст\
текст\
текст
Адрес может быть представлен в виде номера строки либо регулярного выражения. Во втором случае найденных строк может быть несколько. При добавлении текста отсутствует возможность задать диапазон строк. Допускается указание только одного шаблона адреса. Если адрес, по которому помещается текст, не указан, тогда команда будет применена к каждой строке входного файла.
Обратите внимание на присутствие символа обратной косой черты в конце каждой добавляемой строки, а также после самой команды а. Этот метасимвол защищает от интерпретации символ новой строки. В последней строке указывать обратную косую черту не требуется, поскольку концевой символ новой строки в этом случае является признаком конца команды.
Добавляемый текст записывается в стандартный выходной поток и не дублируется во входном буфере, поэтому не подлежит редактированию, т. е. на него нельзя сослаться в последующих шаблонах поиска. Чтобы иметь возможность отредактировать полученный текст, необходимо сохранить результаты работы редактора sed в новом файле и применить команды редактирования уже к нему.