sed: sucht und druckt nur die übereinstimmenden Muster

sed: sucht und druckt nur die übereinstimmenden Muster

Aus einer 2 GB großen Maven-Build-Protokolldatei wird versucht, die Ausnahmen und das entsprechende Modul zu erfassen. Format der Protokolldatei:

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

Habe mir die folgenden Optionen ausgedacht, aber beide drucken zusätzliche Zeilen vor und nach der Übereinstimmung. Ich bin mir nicht sicher, wie ich nach oben gehe und das Modul abgleiche, für das die Ausnahmeeinheiten protokolliert wurden. Zeilen zwischen diesen beiden Übereinstimmungen sind nicht erforderlich, nur die Ausnahmeeinheiten und ihr fehlgeschlagenes Modul.

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

Bearbeiten: Erwartete Ausgabe:

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

Antwort1

Aus den Kommentaren entnehme ich, dass Sie tatsächlich eine Datei wie diese haben:

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

Und nur wenn es eine Zeile gibt, Exception units:möchten Sie, dass diese Zeilen bis zur leeren Zeile gedruckt werden, aber vor der letzten [main] [INFO] BuildingZeile, damit Sie wissen, zu welchem ​​Modul die Nachrichten gehören. Andere [main] [INFO] Buildingsollen ausnahmslos nicht gedruckt werden?

In solchen Fällen speichern Sie jede [main] [INFO] BuildingZeile mit im Haltebereich h, damit Sie sie bei Bedarf wieder aufrufen können:

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

Wenn die Exception units:Zeile gefunden wird, werden die Leerzeichen geändert x, die gespeicherte BuildingZeile wird pgedruckt und die Leerzeichen werden xzurückgeändert. Abschließend werden alle Zeilen bis zur leeren Zeile pgedruckt (das leere Muster //entspricht dem letzten Muster, sodass wir es nicht wiederholen müssen). Die Ausgabe ist:

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

Wenn dies nicht das ist, was Sie möchten, geben Sie bitte ein Beispiel aus der Praxis.

verwandte Informationen