sed: pesquise e imprima apenas os padrões correspondentes

sed: pesquise e imprima apenas os padrões correspondentes

A partir de um arquivo de log de construção do Maven de 2 GB, tentando capturar as exceções e seu módulo correspondente. Formato do arquivo de log:

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

Surgiu as opções abaixo, mas ambas estão imprimindo linhas adicionais, antes e depois da partida. Não tenho certeza de como percorrer e combinar o módulo para o qual as unidades de exceção foram registradas. As linhas entre essas duas correspondências não são necessárias, apenas as unidades de exceção e seu módulo com falha.

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

Editar: Saída esperada:

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

Responder1

A partir dos comentários, descobri que você realmente tem um arquivo 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 ........

E somente se houver uma linha Exception units:você deseja que essas linhas sejam impressas até a linha vazia, mas precedidas da última [main] [INFO] Buildinglinha, para saber a qual módulo as mensagens pertencem. Outros, [main] [INFO] Buildingsem exceções, não devem ser impressos?

Em casos como este, você armazena cada [main] [INFO] Buildinglinha no espaço de espera com h, para poder recuperá-la se necessário:

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

Se a Exception units:linha for encontrada, os espaços serão alterados, a linha xarmazenada será impressa e os espaços serão alterados novamente. Finalmente todas as linhas até a linha vazia são impressas (o padrão vazio corresponde ao último padrão, portanto não precisamos repeti-lo). A saída é:Buildingpxp//

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

Se não é isso que você deseja, dê um exemplo do mundo real.

informação relacionada