sed で HTML のハイパーリンク(<a href="http://hoge.jp/">ほげほげ</a>)をハイクのリンク記法([http://hoge.jp/:title=ほげほげ])に変換してみる例
sed -e "s/<a\ href=\"/\[/g" | sed -e "s/\">/:title=/g" | sed -e "s/<\/a>/\]/g"
お話しするにはログインしてください。
文字列操作メモのことを語る
文字列操作メモのことを語る
http://www.asahi.com/news/list.html の全記事一覧から URL を取り出してみる。
wget -q -O - http://www.asahi.com/news/list.html | nkf --utf8 -Lu | grep "MainInner" | sed -e "s/\(<\/li>\)/\1\n/g" | grep "<li><a\ href=\"[^>]*\">" | sed -e "s/^.*\/home\.html.*$//g" | sed -e "s/^.*\/news\/.*$//g" |sed -e "s/\(^.*<a\ href=\"\)\([^>]*update[^>]*\)\(\">\).*$/\2/g" | sed -e "/^$/d" | sed -e "s/\(.*\.html$\)/http:\/\/www\.asahi\.com\1/g"
文字列操作メモのことを語る
ハイクで話題になっていそうなことを抽出してみる。
wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/</</g" | sed -e "s/>/>/g" | sed -e "s/<[^>]*>//g" | nkf --euc | chasen | nkf --utf8 | grep "名詞" | sort | sed -e "s/^.*\t.*\(数\|接頭\|副詞\|非自立\|接尾\|代名詞\).*$//g" | tr -s "\n" | cut -f 1 | sed -e "/^$/d" | uniq -c | sort -r | head
出力例:
5 ひとり
3 テレビ
3 サザエさん
2 変
2 猫
2 切断
2 睡眠
2 進化
2 笑
2 最後
文字列操作メモのことを語る
検索語の数が多すぎて今一なのでランダムに四つだけを取り出すように変更。
ggl="http://www.google.co.jp/search?q=`wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/&lt;/</g" | sed -e "s/&gt;/>/g" | sed -e "s/<[^>]*>//g" | nkf --euc | chasen | nkf --utf8 | grep "名詞" | sort | uniq -d | sed -e "s/^.*\t.*\(数\|接頭\|副詞\|非自立\|接尾\|代名詞\).*$//g" | tr -s "\n" | cut -f 1 | sort -R | sed -e "s/$/\t/g" | tr -d "\n" | cut -f 1-4 | sed -e "s/\t/\+OR\+/g"`"
自分で知りたいことを検索するのと違って何が出るかわからなくておもしろい。
文字列操作メモのことを語る
ハイクの RSS から今話題になっていそうな名詞を抜き出して Google にかける URL を変数に入れる。
ggl="http://www.google.co.jp/search?q=`wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/&lt;/</g" | sed -e "s/&gt;/>/g" | sed -e "s/<[^>]*>//g" | nkf --euc | chasen | nkf --utf8 | grep "名詞" | sort | uniq -d | sed -e "s/^.*\t.*\(数\|接頭\|副詞\|非自立\|接尾\|代名詞\).*$//g" | tr -s "\n" | cut -f 1 | sort -R | sed -e "s/$/\ |\ /g" | tr -d "\n"`"
…[全文を見る]
文字列操作メモのことを語る
uniq の後の -d が抜けてた。
文字列操作メモのことを語る
ハイクの RSS から名詞を抽出して、さらに重複するものだけを抽出してみる。
wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/&lt;/</g" | sed -e "s/&gt;/>/g" | sed -e "s/<[^>]*>//g" | nkf --euc | mecab | nkf --utf8 | grep "名詞" | cut -f 1 | sort | uniq
出力例:
ー
TV
こと
ごと
の
ひとり
よう
ん
アナログ
オフ
カミナギ
キー
サッカー
テレビ
ハイク
ビール
ホント
ヤンキー
一
右
今
人
成人
文字列操作メモのことを語る
sed はテキストを一行ずつ読み込んで処理するのが基本。
なので、複数行にまたがる処理をするのはややこしくなることがある。
手軽なのは、tr で改行を削除してから sed に渡す方法。
cat source.txt | tr -d "\n" | sed (略
後から改行を復元したい場合は、予め行末に印をつけておき、処理後に印を改行に置き換える。
sed -e "s/$/通常文中に出現せず、処理に支障ない文字列/g" source.txt | tr -d "\n" | sed 目的の処理 | sed -e "s/通常文中に出現せず、処理に支障ない文字列/\n/g"
文字列操作メモのことを語る
HTML や XML からタグを除去して要素の内容を取り出す。
sed -e "s/<[^>]*>//g" sourcefile.html