2 GB の Maven ビルド ログ ファイルから、例外とそれに対応するモジュールをキャプチャしようとしています。ログ ファイルの形式:
[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT
...........
...........
...........
...........
Exception units:
<failed units>
<failed units>
以下のオプションを試しましたが、どちらも一致の前後に追加の行が出力されます。例外ユニットがログに記録されたモジュールをトラバースして一致させる方法がわかりません。これら 2 つの一致の間の行は不要で、例外ユニットとその失敗したモジュールだけが必要です。
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:
、スペースは変更されx
、保存されたBuilding
行がp
印刷され、スペースはx
変更された後に戻されます。最後に、空行までのすべての行がp
印刷されます (空パターンは//
最後のパターンと一致するため、繰り返す必要はありません)。出力は次のようになります。
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT
Exception units:
<failed units>
<failed units>
これが望ましくない場合は、実際の例を挙げてください。