sed: поиск и печать только соответствующих шаблонов

sed: поиск и печать только соответствующих шаблонов

Из файла журнала сборки Maven размером 2 ГБ, пытаюсь захватить исключения и соответствующий им модуль. Формат файла журнала:

[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
...........
...........
...........
........... 
Exception units:
 <failed units>
 <failed units>

Придумал следующие варианты, но оба печатают дополнительные строки, до и после совпадения. Не уверен, как пройти вверх и сопоставить модуль, для которого были зарегистрированы единицы исключения. Строки между этими двумя совпадениями не требуются, только единицы исключения и их неисправный модуль.

sed -n '/Exception units/,/^$/p' maven_build.logа такжеsed -n '/Building/,/Exception units/!p'

Редактировать: Ожидаемый результат:

Building junt-parent 1.0.0-SNAPSHOT 
Exception units:
 <failed units>
 <failed units>

решение1

Из комментариев я понял, что у вас на самом деле есть такой файл:

[main] [INFO] Building bar 1.0.0-SNAPSHOT
... Building ........
[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
... Building ........
Exception units:
 <failed units>
 <failed units>

[main] [INFO] Building foo 1.0.0-SNAPSHOT
... Building ........

И только если есть строка, Exception units:вы хотите, чтобы эти строки печатались до пустой строки, но предварялись последней [main] [INFO] Buildingстрокой, чтобы вы знали, к какому модулю относятся сообщения. Остальные [main] [INFO] Buildingбез исключений не должны печататься?

В таких случаях вы сохраняете каждую [main] [INFO] Buildingстроку в области удержания с помощью h, чтобы при необходимости ее можно было вызвать:

sed -ne '/\[main] \[INFO] Building/h;/Exception units:/{x;p;x;}' -e '//,/^$/p'

Если Exception units:строка найдена, пробелы меняются на e x, сохраненная Buildingстрока pпечатается, а пробелы xменяются обратно. Наконец, печатаются все строки до пустой строки p(пустой шаблон //совпадает с последним шаблоном, поэтому нам не нужно его повторять). Вывод:

[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
Exception units:
 <failed units>
 <failed units>

Если это не то, что вам нужно, приведите пример из реальной жизни.

Связанный контент