sedを用いたtag_remover

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  

 

タグを除去して平文を得ることができました。