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.

<p><strong>10.11. Замена подстроки (команда s)</strong></p>

Команда 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.

Ссылка на искомую подстроку с помощью метасимвола &

Перейти на страницу:

Похожие книги