sed: busca e imprime solo los patrones coincidentes

sed: busca e imprime solo los patrones coincidentes

Desde un archivo de registro de compilación Maven de 2 GB, intentando capturar las excepciones y su módulo correspondiente. Formato del archivo de registro:

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

Se me ocurrieron las siguientes opciones, pero ambas imprimen líneas adicionales, antes y después del partido. No estoy seguro de cómo recorrer y hacer coincidir el módulo para el cual se han registrado las unidades de excepción. No se requieren líneas entre esas 2 coincidencias, solo las unidades de excepción y su módulo fallido.

sed -n '/Exception units/,/^$/p' maven_build.logasí comosed -n '/Building/,/Exception units/!p'

Editar: Salida esperada:

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

Respuesta1

Por los comentarios descubro que en realidad tienes un archivo como este:

[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 ........

Y solo si hay una línea, Exception units:desea que esas líneas se impriman hasta la línea vacía, pero precedidas por la última [main] [INFO] Buildinglínea, para saber a qué módulo pertenecen los mensajes. ¿Otros [main] [INFO] Buildingsin excepciones no deberían imprimirse?

En casos como este, almacena cada [main] [INFO] Buildinglínea en el espacio de espera con h, para poder recuperarla si es necesario:

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

Si Exception units:se encuentra la línea, se cambian los espacios , se imprime la línea xalmacenada y se vuelven a cambiar los espacios. Finalmente se imprimen todas las líneas hasta la línea vacía (el patrón vacío coincide con el último patrón, por lo que no es necesario repetirlo). La salida es:Buildingpxp//

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

Si esto no es lo que desea, proporcione un ejemplo del mundo real.

información relacionada