GREP / SEDまたはAWK:パターンマッチングに基づいてファイルの全体の段落を印刷します。 [重複]

GREP / SEDまたはAWK:パターンマッチングに基づいてファイルの全体の段落を印刷します。 [重複]

各段落が約15行の数百の段落を含むファイルがあります。パターンを探す必要があります。発生数:1。このパターンが段落で見つかった場合は、段落全体を印刷する必要があります。段落は2つの改行に分かれています。

私は明らかにファイルの最初の項目を印刷する次のコード行を試しました。何らかの方法でループを使用してこれらのイベントをすべて印刷することはできません。

sed -n '1,/Occurrence: 1/p' ystdef.txt | tail -9 > ystalarm.txt

gこれを行うには(グローバル)フラグを使用できますかsed?それではどうですか?

私はこのコマンドを知っていますが、grep -A/B/C私のCygwin端末では動作しません。

ベストアンサー1

入力レコードが少なくとも2つの改行シーケンスで区切られるawkの「短絡モード」を使用できます。RS空の文字列に設定すると有効になります。

awk -v RS= '/Occurance: 1/' ystdef.txt

これらの段落はすべて一緒に折り畳まれて印刷されます(内容の間に改行文字を含む)。 awkを使用すると、出力区切り文字を入力区切り文字と一致させることはできませんが(一部のGNU awk拡張を除く)、段落区切り文字を2つの改行で簡単に正規化できます。

awk -v RS= -v ORS='\n\n' '/Occurance: 1/' ystdef.txt

最後に追加の改行をしたくない場合:

awk -v RS= '/Occurance: 1/ {if (not_first) print ""; print; not_first=1}' ystdef.txt

おすすめ記事