HTML文書はタグと呼ばれる<文字と>文字で囲まれた命令で書式を指定しています。このタグを削除して平文に変換することを目的としています。
間違いの例
sedの後方参照と呼ばれる機能を利用します。
sed -e "s/<\(.*\)>//g"
の赤い\(と青い\)がパターンと呼ばれる機能です。その間に挟まれた.*は1文字以上任意の文字列を示します。すなわち、<>で囲まれた1文字以上の任意の文字列を空文字に置換してしまおうというコマンドです。
見事に<title>タグが削除されました。ちなみに、この赤い\(と青い\)に囲まれたパターンという文字列は\1というメタ文字に記憶されていますので、
としてやると<>に囲まれたtitleという文字列を表示させることができます。これが後方参照の本来の用法です。
さて、タグを削除できたと喜び勇んで使ってみると、
何も表示されなくなりました。行頭の<と行末の>に囲まれた
<title> これがタイトルです </title>
の部分をパターンと認識してしまったのですね。
正解の例
#!/bin/bash # tag_remover.sh # <と>で囲まれた部分を削除します sed -e "s/<\([^>]*\)>//g"
実際には .* ではなく、[^>]* でなくてはならなかったということです。
具材 | 量 | 熱量(kcal) | |
---|---|---|---|
砂肝 | 100グラム | 93 | |
サラダ油 | 大さじ1 | 111 | |
オクラ | 100グラム | 30 | |
ニンジン | 1/2本 | 33 | |
塩コショウ | 適宜 | - | |
合計 | 267 |
タグを除去して平文を得ることができました。