Многострочный шаблон сопоставления и удаления строк - sed / awk / grep

Полагаю, вы перезагрузили систему после обновления. Если да, то это не удалось, поскольку ваша система явно все еще использует более старое ядро.

Если автоматическое обновление не удалось, вручную проверьте конфигурацию загрузчика и убедитесь, что при загрузке вызывается правильный образ.

Если это виртуальный интернет-хост, есть вероятность, что у вас есть доступ только к контейнерной системе. В этом случае вы не можете самостоятельно изменить ядро.

1
27.03.2018, 21:14
2 ответа

Это не работа дляsed(вы не должны полагаться на последовательные повторяющиеся записи ). Используйтеawk:

  1. Установите разделитель записей на регулярное выражение ^-+$.

  2. Используйте ассоциативный массив, где индекс представляет собой конкатенацию HostName и ServiceName. Для любой прочитанной записи поместите запись в массив, только если она еще не существует.

  3. В конце обработки файла распечатайте все элементы массива, отформатированные в отдельные строки, с вашими ----строками-разделителями.

0
28.01.2020, 00:38

GNUawkподход:

awk 'BEGIN{ 
         RS = ORS = "-------\n";
         pat = "^Hostname += ([^ ]+)\nService name += ([^ ]+)\n$";  
     }
     NR == FNR{ 
         if (match($0, pat, a)) { items[a[1], a[2]]++ } 
         next 
     }
     match($0, pat, a) && (a[1], a[2]) in items \
     && items[a[1], a[2]] > 1{ next }1' inout.txt input.txt

Выход:

-------
Database alias = ABC
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Database alias  = PQR
Node name   = node01
Hostname    = hostnode01
Service name    = 12345
-------
Database alias  = XYZ......
-------
0
28.01.2020, 00:38

Теги

Похожие вопросы