指定された文字列で始まる行を含む段落を印刷します。

指定された文字列で始まる行を含む段落を印刷します。

私の入力ファイルは次のとおりです。ここでレコードは空行で区切られます。xx行の先頭に記録(段落)を印刷する必要があります。

cat in.txt
a cfg
b hfh
c gfh
xx jhl
d kjl

a opi
b ghj
c tyu
yy xxx
d ghj

a xxx
b fgk
c ghf
z zxx
d ghj

私の予想結果は次のとおりです。

a cfg
b hfh
c gfh
xx jhl
d kjl

次のコマンドを試しましたが、機能しません。

awk -v RS='' -v ORS='\n\n' "/^XX/" in.txt

^この場合は動作しません

答え1

以下を使用する方が簡単ですperl

perl -00 -ne 'print if /^xx/m' in.txt

このmフラグは、レコードの開始と終了だけでなく、レコード内の各行の開始と終了でも一致する複数行モードを有効にし^ます$

を使用すると、awkいつでも次のことができます。

awk -v RS='' -v ORS='\n\n' '/(^|\n)xx/' in.txt 

つまり、レコードの先頭(^)を一致させるか、|改行文字(\n)の後の()を一致させます。

関連情報