Из файла журнала сборки 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>
Если это не то, что вам нужно, приведите пример из реальной жизни.