Назад | Перейти на главную страницу

Как удалить совпадающую строку, строки вверху и внизу в разделе?

В конфигурации nagios

define service{
          use                 generic-service
          host_name           xxx.xxx.com
          service_description xxx Status
          check_command       check_http!xxx.xxx.com -S
          }

Я хочу удалить весь раздел, как указано выше, соответствующее регулярное выражение xxx.xxx.com . Как это сделать с помощью sed или любая другая утилита Linux

ed my-nagios.conf <<q
w my-bagios.conf~
g/xxx.xxx.com/ ?define?,/}/d
w
q

Может быть, такой сценарий awk:

awk -f этот-сценарий.awk my-nagios.conf> my-nagios.conf.new

# start of block
/^define/ {
  collecting = 1;
  matched = 0;
  buf = "";
}

# end of block
/}/ {
   collecting = 0;
   if (!matched) {
     print buf $0;
   };
   next;
}

# Row in bad block
/xxx.abc.com/ {
  if (collecting)
    matched = 1;
}

# Normal row
{
  if (collecting) {
    buf = buf $0 "\n";
  } else {
    print $0;
  }
}