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.
Ссылка на искомую подстроку с помощью метасимвола &