お話しするにはログインしてください。

|

Tips:プロレスラーは、ヒンズースクワットといって、最終的には三千回やってもらいます。最初は五十回で結構です。
id:Kodakana
文字列操作メモのことを語る

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"

id:Kodakana
文字列操作メモのことを語る

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"

id:Kodakana
文字列操作メモのことを語る

ハイクで話題になっていそうなことを抽出してみる。
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 | 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 最後

id:Kodakana
文字列操作メモのことを語る

検索語の数が多すぎて今一なのでランダムに四つだけを取り出すように変更。
ggl="http://www.google.co.jp/search?q=`wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/&amp;lt;/</g" | sed -e "s/&amp;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"`"
 
自分で知りたいことを検索するのと違って何が出るかわからなくておもしろい。

id:Kodakana
文字列操作メモのことを語る

ハイクの 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/&amp;lt;/</g" | sed -e "s/&amp;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"`"
[全文を見る]

id:Kodakana
文字列操作メモのことを語る

uniq の後の -d が抜けてた。

id:Kodakana
文字列操作メモのことを語る

ハイクの RSS から名詞を抽出して、さらに重複するものだけを抽出してみる。
wget -q -O - http://h.hatena.ne.jp/.rss | grep "description\|title" | sed -e "s/&amp;lt;/</g" | sed -e "s/&amp;gt;/>/g" | sed -e "s/<[^>]*>//g" | nkf --euc | mecab | nkf --utf8 | grep "名詞" | cut -f 1 | sort | uniq
出力例:

TV
こと
ごと

ひとり
よう

アナログ
オフ
カミナギ
キー
サッカー
テレビ
ハイク
ビール
ホント
ヤンキー




成人

id:Kodakana
文字列操作メモのことを語る

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"

id:Kodakana
文字列操作メモのことを語る

HTML や XML からタグを除去して要素の内容を取り出す。
sed -e "s/<[^>]*>//g" sourcefile.html