файла:
$ sed '1d' quote.txt
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.
В следующем примере удаляются строки 1—3:
$ sed '1,3d' quote.txt
The local nurse Miss P. Neave was in attendance.
В этом примере удаляется последняя строка:
$ sed '$d' 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.
Можно также удалить строку, в которой найдено совпадение с регулярным
выражением. В показанном ниже примере удаляется строка, содержащая слово '"Neave":
$ sed '/Neave/d' 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.11. Замена подстроки (команда s)
Команда s (substitute) осуществляет во всех адресуемых строках замену подстроки, соответствующей заданному шаблону, указанной подстрокой. Формат команды
таков:
[адрес1[, адрес2]]s/шаблои_поиска/шаблбон_замены/[флаги]
Ниже перечислены возможные флаги:
| g | Замена в адресуемой строке каждой подстроки, соответствующей шаблону (по умолчанию заменяется лишь самая первая подстрока каждой адресуемой строки) |
| n | Замена n–й подстроки, соответствующей шаблону (n — любое число в диапазоне от 1 до 512) |
| p | Вывод на экран строки, в которой была произведена замена; если в строке сделано несколько замен, она будет отображена соответствующее число раз |
| w имя_файла | Запись измененной строки в указанный файл |
В следующем примере осуществляется замена слова "night" словом "NIGHT":
$ sed -n 's/night/NIGHT/p' quote.txt
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.