Метасимвол & позволяет сослаться в шаблоне замены на подстроку, соответствующую шаблону поиска. Например, в следующей команде слово "Miss" либо "miss" заменяется фразой "lovely Miss Joan" или "lovely miss Joan" соответственно:
$ sed -n 's/[Mm]iss/lovely & Joan/p' quote.txt
The local nurse lovely Miss Joan P. Neave was in attendance
Заметьте, что пробелы также являются частью шаблона замены.
10.12. Вывод строк в файл (команда w)
Подобно тому как оператор > применяется для перенаправления результатов работы программы в файл, команда w (write) редактора sed позволяет записать в указанный файл строки, отобранные по заданному шаблону адреса. Формат этой команды таков:
[адрес1[, адрес2]]w имя_файла
Если файл не существует, он будет создан, если существует — его содержимое будет перезаписано. Если в сценарии встречается несколько команд w, направляющих результаты в один и тот же файл, данные всех команд, кроме первой, будут добавляться в конец файла.
Рассмотрим пример:
$ sed '1,2w sed.out' quote.txt
Здесь содержимое файла quote.txt выводится на экран, а строки с номерами 1 и 2 отправляются в файл с именем sed.out.
$ cat sed.out
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company,
В следующем примере осуществляется поиск строки, содержащей слово "Neave", и если такая строка найдена, она записывается в файл sed.out.
$ sed -n '/Neave/w sed.out' quote.txt
$ cat sed.out
The local nurse Miss P. Neave was in attendance.
10.13. Чтение строк на файла (команда r)
В процессе обработки входного файла редактор sed позволяет читать текст из другого файла и добавлять его к текущему содержимому буфера, размещая после каждой строки, соответствующей шаблону адреса. Формат предназначенной для этого команды r (read) таков:
[адрес]r имя_файла
Давайте создадим небольшой файл с именем sedex.txt.
$ cat sedex.txt
Boom boom went the music.
В следующем примере содержимое этого файла выводится на экран после строки файла quote.txt, содержащей слово "company":
$ sed '/company/r sedex.txt' quote.txt
The honeysuckle band played all night for only $90.
It was an evening of splendid music and company.
Boom boom went the music.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P. Neave was in attendance.
10.14. Досрочное завершение работы (команда q)
Иногда требуется завершить работу редактора sed сразу же после нахождения первого совпадения с шаблоном. Эту задачу решает команда q (quit), имеющая следующий формат:
[адрес]q
Обратимся к примеру. Допустим, требуется осуществить поиск строки, содержащей такой шаблон:
/\<.a.\{0,2\}\>/
Этому шаблону соответствует любое слово (выражение \< обозначает начало слова, а выражение \> — его конец(, в котором вторым символом является буква 'a', а за ней идет не более двух символов. В файле quote.txt таких слов четыре:
• строка 1 — band,
• строка 2 — was,
• строка 3 — bad,
• строка 4 — was.
Показанная ниже команда находит строку, в которой шаблон встречается первый раз, после чего завершает работу:
$ sed */\<.a.\{0,2\)\>/q' quote.txt
The honeysuckle band played all night long for only $90.
10.15. Отображение управляющих символов (команда l)
Иногда даже в текстовых файлах содержатся различного рода непечатаемые символы. Это может быть следствием неправильного ввода данных в текстовом редакторе или ошибок конвертации при загрузке файлов из других систем. При выводе таких файлов. на экране могут быть получены странные результаты, когда вместо непечатаемого символа отображается один или несколько обычных символов непонятного происхождения. Разобраться в таких ситуациях помогает команда cat -v, которая помечает начало замещающей последовательности символом '^' (знак крышки). Предположим, вы обнаружили незнакомый файл func.txt и хотите узнать его содержимое:
$ cat func.txt
This is the F1 key:P This is the F2 key:Q
Символы 'P' и 'Q' на концах строк кажутся подозрительными. Попробуем применить команду cat -v:
$ cat -v func.txt