Как удалить следующую строку, если следующая строка соответствует шаблону с sed? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть проблемы, чтобы удалить следующую строку, если следующая строка соответствует шаблону.Например:

define service{
host_name               A
notification_period     F
}


define service{
host_name               A
notification_period     metrologie
notification_period     F
}

Я проверяю шаблон метрологии.Если следующая строка содержит параметр уведомл., Я хочу удалить строку.1006 *

, но преобразует строку в:

define service{
host_name               A

}


define service{
host_name               A
notification_period     metrologie
}

Я хотел бы получить такой вывод:

define service{
host_name               A
notification_period     F
}


define service{
host_name               A
notification_period     metrologie
}

Ответы [ 2 ]

4 голосов
/ 27 сентября 2019

Вы можете использовать

sed '/metrologie/{N;/\n.*notification_period/{s/\n.*//}}' file

См. онлайн sed демо .

Подробности

  • /metrologie/ - находит строку с metrologie, а затем
    • N; - читает следующую строку в пространство шаблона с новой строкой, прежде чем
    • /\n.*notification_period/ - пытается сопоставитьтекущий текст в пространстве шаблона с шаблоном, совпадающим с новой строкой, любые 0+ символов, notification_period
    • {s/\n.*//}} - если вышеуказанный шаблон совпадает, замените символ новой строки и все после него пустой строкой.
0 голосов
/ 27 сентября 2019

Это может работать для вас (GNU sed):

sed ':a;/metrologie/{n;/notification_period/d;ba}' file

Если строка содержит metrologie, напечатайте и извлеките следующую строку.Если эта строка содержит notification_period, удалите ее, в противном случае повторите.

...