Шрифт:
The honeysuckle band played all NIGHT long for only $90.
Если требуется удалить из строки символ '$', оставьте шаблон замены пустым (не забывайте, что в редакторе sed знак доллара является метасимволом, поэтому он должен быть защищен обратной косой чертой).
$ sed -n 's/\$//р' quote.txt
The honeysuckle band played all night long for only 90.
Флаг g (global) позволяет выполнить глобальную подстановку шаблона замены на место шаблона поиска в пределах каждой адресуемой строки. Предположим, например, что мы хотим заменить все точки в файле quote.txt восклицательными знаками. Следующая команда выполнит работу не полностью:
$ sed 's/\./!/' 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.
Обратите внимание на последнюю строку: в ней точка встречается дважды, но замене подвергся только первый символ. Для исправления подобной ситуации нужно указать флаг g:
$ sed 's/\./!/g' 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!
С помощью флага w (write) можно указать файл, в который будут записаны все модифицируемые строки. В показанном ниже примере осуществляется замена слова
"splendid" словом "SPLENDID", а все строки, где была выполнена эта замена, помещаются в файл sed.out.
$ sed -n 's/splendid/SPLENDID/w sed.out' quote.txt
Вот каким будет содержимое этого файла:
$ cat sed.out
It was an evening of SPLENDID music and company.
Ссылка на искомую подстроку с помощью метасимвола &
Метасимвол & позволяет сослаться в шаблоне замены на подстроку, соответствующую шаблону поиска. Например, в следующей команде слово "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)