空行区切りのブロックに対して、特定のキーワードを持つブロックを除外して出力する、ということをやりたいというツイートを見かけて、将来的に自分にも必要になる時が来るかもしれないので備忘として残しておくことにした。 とりあえず、ここに記述したようにawkを使えばいけるようだ。
sed '1d;$d' test.txt | awk -vRS= -vORS='\n\n' '!/XXX/'
[root@BS-PUB-CENT7-01 ~]# cat test.txt
#####
aaa
bbb
ddd
ddd
XXX
fff
ggg
hhh
iii
XXX
kkk
lll
#####
[root@BS-PUB-CENT7-01 ~]# sed '1d;$d' test.txt | awk -vRS= -vORS='\n\n' '!/XXX/'
aaa
bbb
ddd
ggg
hhh
iii