apacheのmod_sedで指定された範囲を消す

apacheのmod_sedで指定された範囲を消す

mod_sedを利用すると、sedと「ほぼ」同じ機能でapacheがレスポンスをするHTMLを編集することができます。
でもなんでか完全互換じゃなくて、特に複数行に対してなにかしようとするとエラーになることがあります。
たとえば、

<!--- Start -->
hogehoge
fugafuga
<!-- End -->

ってブロックを全部けしたい。

sedだとこれでOK。中括弧はいらんかもしれない。

$ sed -e '/<!-- Start/,/<!-- End/{d}' filename

ところがこれをそのままmod_sedに書くとエラーになる。

OutputSed    '/<!-- Start/,/<!-- End/{d}'

エラーメッセージは以下。

AH00526: Syntax error on line 80 of /usr/local/apache2/conf/extra/hoge.conf:
Failed to compile sed expression. command garbled: /<!-- Start/,/<!-- End/{d}

範囲指定ができないっぽいですね。なので別の方法で。けしたい行を見つけたら、そのブロックの最後のところまでループさせてパターンスペースに投入。
ループを抜けたところでdで消す。
sedで書くとこうです。

/<!-- Start/{        けしたい行の最初
:loop            ループ開始
/<!-- End /b end      終了条件
N            次の行を読んで、パターンスペースへ追加
b loop          ループする
:end           抜けるところ
d            パターンスペースを消す。
}

mod_sedのディテクティヴだとこう。

      OutputSed         '/<!-- Start/{'
      OutputSed         ':loop'
      OutputSed         '/<!-- End /b end'
      OutputSed         'N'
      OutputSed         'b loop'
      OutputSed         ':end'
      OutputSed         'd'
      OutputSed         '}'

これ初見で読めて理解出来るひと日本に何人くらいいるんだろ。