私の入力ファイルは次のとおりです。ここでレコードは空行で区切られます。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
)の後の()を一致させます。