以下のテキストがあります。ABC:CDA*
とを含むブロックを印刷しますfgh:qwe
。
Awkで試しましたが、すべてのデータが印刷されました。
awk -n -v RS='' -v ORS='\n\n' 'match($0,".*fgh:qwe[^\n]*") { print substr($0,1,RLENGTH) }'
入力する:
ABC:CDA_sd
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
axy:ABC_gf
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_ghg
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_jsagdh
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
出力:
ABC:CDA_sd
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_ghg
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_jsagdh
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
答え1
努力する:
awk -v RS= '/^ABC:CDA.*fgh:qwe$/{ print sep $0; sep=ORS }' infile
答え2
出力フォーマットをより効果的に制御するには、Perlでショートモードを採用することをお勧めします。
perl -00nE 'say "$1" if /ABC:CDA(.*)fgh:qwe/s' example
Perl -00ne
意味: 各段落ごと
答え3
GNUでテストされましたawk
。
awk '/^(axy:ABC_|ABC:CDA_)[[:lower:]]{2,6}$/ {check = ($1 == "axy:ABC_gf")} !check' file
ABC:CDA_sd
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_ghg
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
ABC:CDA_jsagdh
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe
または、次のデータのみを使用してください。
awk '/^(axy:ABC_|ABC:CDA_)[[:lower:]]{2,6}$/ {check = ($1 == "axy:ABC_gf")} check' file
axy:ABC_gf
dfg:GFJ
dfg:jasdn
iop:yui
ghj:bhu
ghj:poi
fgh:qwe