段落単位で選択する grep(1) って無いのかな

(1つ以上の連続した)空行で区切られた「段落」の中に検索語があったら段落全体を出力するような grep(1) がほしい.これも昔 若かりし頃は

  1. sed(1)レジスタを使って,元の改行文字を(決して衝突しないマーカー) __FLA_XYZZY_NEW_LINE__ に変換しつつ全てを1行にくっつけ,
  2. __FLA_XYZZY_NEW_LINE__(__FLA_XYZZY_NEW_LINE__)+ で再び行分割し(これで段落単位で連結されたことになる)
  3. grep(1)
  4. __FLA_XYZZY_NEW_LINE__ で再び行分割(これで元の文章に戻る)

とかやってた.まぁ sed(1) よりもうちょっと賢いスクリプト言語(配列使えるような)があれば,もう少し幸せになってたはずだが... 私においてもone liner厨二病というのは避けがたいものだったってこと.
普通の意味での (Unix shell) パイプラインで詰まったときは while read line; do ...; done とか ( subshell-cmd; ) に逃げるのは常套手段だが,しかしそれは(2011年現在の価値基準では)もはや純粋なUnix shell-script programmingを放棄すべき地平線に来てることを意味する.