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 '}'
これ初見で読めて理解出来るひと日本に何人くらいいるんだろ。