$ sed -n '1р' quote.txt
The honeysuckle band played all night long for only $90.
Чтобы сослаться на последнюю строку входного файла, воспользуйтесь метасимволом '$':
$ sed -n '$p' quote.txt
The local nurse Miss P. Neave was in attendance.
Если требуется отобразить весь файл, задайте диапазон строк от первой до последней:
$ 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 в новом файле и применить команды редактирования уже к нему.
10.7. Создание файла сценария
Конечно, ввод многострочных команд в режиме командной строки не слишком удобен и чреват ошибками, поэтому лучше всего размещать такие команды в файлах сценариев. Кроме того, в сценариях допускается наличие пустых строк и комментариев, что облегчает восприятие самих сценариев.
Создайте новый файл с именем append.sed и добавьте в него показанные ниже команды:
$ cat append.sed
#!/bin/sed -f
/company/a\
Then suddenly it happened.
Теперь сделайте этот файл исполняемым:
$ chmod u+x append.sed
и запустите его на выполнение:
$ append.sed quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Then suddenly it happened.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P. Neave was in attendance.