2つのタグ間の複数行のgrepで最後の一致のみを表示する

2つのタグ間の複数行のgrepで最後の一致のみを表示する

データセグメントをログ出力に混在させるプログラムがあります。

log message
log message
----BEGIN INLINE DATA----
data
data
data
-----END INLINE DATA-----
log messge

似たようなものを探していますが、

awk '/-BEGIN INLINE DATA-/,/-END INLINE DATA-/'

ただし、周囲の「ラベル」ではなく最後のデータセグメントのみを印刷する必要があります。

ベストアンサー1

awk を使用して開始マーカーの後にデータの蓄積を開始し、終了マーカーに出会うと停止します。新しいスタートマーカーが表示されたら、データアキュムレータを再初期化します。

awk '
    /-BEGIN INLINE DATA-/ {data = ""; storing = 1}
    /-END INLINE DATA-/ {storing = 0}
    storing {data = data "\n" $0}
    END {print data}
'

おすすめ記事