sed:一致するパターンのみを検索して印刷します。

sed:一致するパターンのみを検索して印刷します。

2GB 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:行が見つかったら、空白を変更し、保存されたxBuildingを印刷pしてx空白をもう一度変更します。最後に、すべての行が空白行までp印刷されます(空白パターンは//最後のパターンと一致するため、繰り返す必要はありません)。出力は次のとおりです

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

これが望まない場合は、実際のケースを聞いてください。

おすすめ記事