空行区切りのブロックに対して、特定のキーワードを持つブロックを除外して出力する、ということをやりたいというツイートを見かけて、将来的に自分にも必要になる時が来るかもしれないので備忘として残しておくことにした。 とりあえず、ここに記述したように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