удаление строки до и после шаблона с помощью команды sed в linux - PullRequest
0 голосов
/ 28 января 2019
forward-zone:
name: "."
forward-addr: 10.1.1.2

forward-zone:
name: "mydomain.com"
forward-addr: 10.1.1.1

Я хотел удалить одну строку перед шаблоном 'name: "."' И одну строку после шаблона (включая сам шаблон).Я попробовал следующую команду, но это не изменяет сам файл.Я хочу сделать модификацию на месте.Пожалуйста, помогите

sed -n '/name: "."/{N;s/.*//;x;d;};x;p;${x;p;}' file

Ответы [ 2 ]

0 голосов
/ 28 января 2019

GNU awk way:

$ awk '$2!~/name:\s*\"."/' RS= FS="\n" file
forward-zone:
name: "mydomain.com"
forward-addr: 10.1.1.1

Начиная с GNU awk 4.1.0, вы можете добавить переключатель -i inplace для изменения файла на месте.
Таким образом, это будет:

awk -i inplace '$2!~/name:\s*\"."/' RS= FS="\n" file
0 голосов
/ 28 января 2019

Примерно так может подойти.

sed -rne '/^name: "\."/{n;n;h;d};1{h;d};x;p;${g;p}' -i file

Опция -i позволяет Sed изменять файл на месте.Команды Sed h, g и x используют Sed's hold space для удержания предыдущей строки, пока текущая строка не будет проверена.Адреса 1 и $ соответственно обрабатывают первую и последнюю строки файла, которые, вероятно, требуют особой обработки.

Хотя это было учебное упражнение, по общему признанию, Awk или даже Perl могли бы быть лучшим инструментом, чемСед для такой многострочной обработки.Тем не менее, с некоторыми дополнительными усилиями, Сед может выполнить работу, как вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...