「第4回春爛漫シェル芸人撩乱勉強会&第22回勝手に新歓定例会」あそびきにました
「第4回春爛漫シェル芸人撩乱勉強会&第22回勝手に新歓定例会」に参加して来ました!
その時のメモやらなにやらをここに。
概要
会長さんからシェルの問題が出題され、それをみんなで黙々(?)と解いていくような形式でした。
初心者には玄人のフォローが着くとのことでしたが、ちょっと頑張って一般枠に。
(初参加だったし、初心者ですって言っても良かったのかもしれない)
各種資料
- イベント概要 => http://kokucheese.com/event/index/78710/
- スライド(問題用) => http://www.slideshare.net/ryuichiueda/20130406-uspstudy-qonly
- スライド(解答付き)=> http://www.slideshare.net/ryuichiueda/20130406-18763665
- Ustream => http://www.ustream.tv/recorded/31380919
やったことなど
※実機環境
- Windows7 + 自作コマンド環境(Batlibrary)
- FreeBSD 8.3 (Windows7 上のVMWare Player で稼働。ターミナルにはteratermを使用し、sshで接続)
- 実のところX Window System(漢は黙ってtwm)でやりたかったんだけども、セットアップが間に合わず。
問① 肩慣らし
cat 2.html | sed 's/index\.cgi//g'
説明は割愛。
問② urlの抜き出し
https://twitter.com/kunst1080/status/322948178238373888
cat 1.html | sed 's/href=/\ /g' | sed 's/>//g' | sed 's/\"//g' | sed 's/<\/a//g' | grep http
少し間違っていた。この解き方では2行目の右端がおかしくなる。
正しくは
cat 1.html | sed 's/href=/\ /g' | sed 's/>//g' | sed 's/\"/\ /g' | sed 's/<\/a/\ /g' | grep http
ちなみに、awkを使ったら一撃で書ける。
awk -F\" '/http/{print $2}' 1.html
問③ HTMLの整形
https://twitter.com/kunst1080/status/322951117359169537
cat 3.html \ | sed 's/<td>/<td>/g' \ | grep -v "^$" \ | sed 's/ //g'
結構間違えていた。1行に
正しくは下記
cat 3.html \ | gsed 's;</td><td>;</td>\n<td>;g' \ | gsed 's;<td>;\t\t<td>;g'
gsed強いわぁ・・・
問④ Yahooトピックスの抽出
https://twitter.com/kunst1080/status/322954715539324928
cat yahoo.html|sed 's/<td>/\ <td>/g' | sed 's/<\/td>/<\/td>\ /g' | grep '<td>' | grep "・" | awk -F\> '{print $3}' | sed 's/<\/a//g'
問⑤ 数値参照の変換
pkg_add -r nkf してる間に終了orz
一応、模範解答をコピペ。
cat numref| nkf --numchar-input cat numref| w3m -T text/html -dump # なんだか化ける
問⑥ POST
pkg_add -r curl
pkg_add -r wget
に非常時に時間がかかった && さっぱりできなかったorz
模範解答をコピペ。
wget --post-data a=aho http://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgi -O -
※-Oオプションで出力先を指定、-で標準出力を表すとのこと。
問⑦ 本日の気温をワンライナーで取得
infoseek天気の「アメダスランキング」が非常に加工しやすい形をしていたので……
curl -s http://infoseek.tenki.jp/forecast/pref-16.html \ | grep -B 2 ℃ | tr -d "\n" \ | gsed "s/--/\n/g" \ | awk -F"[\"<>]" '/todouhuken/{print $9" "$21" "$29}'
※もしかしたら、アメダスランキングではダメなのかもしれないぞ
問⑧ 画像のダウンロード
※URL=http://headlines.yahoo.co.jp/hl
https://twitter.com/kunst1080/status/322974102304460800
curl $URL | sed -e 's/http:/\ http:/g' | sed 's/jpg.*/jpg\ /g' | grep jpg | xargs -I % echo %
短くするとこうなる
https://twitter.com/kunst1080/status/322976906544824320
curl $URL | sed 's/src=/\ src=/g' | egrep '(jpg|jpeg|png|gif)' | awk -F\" '"src="{print $2}'
問⑨ クローリング
玄人からのツッコミで、「それ、wgetでできるよ」的な会話があって、下記の通り(模範解答ママ)
wget -r http://yahoo.co.jp
無慈悲なアレ
おまけ ―― それ、cmd.exe(コマンドプロンプト)でできるよ!
※非常に残念ながら、一部しか解くことができなかった。
問① 肩慣らし
https://twitter.com/kunst1080/status/322946314444881922
chcp 65001 for /f "usebackq tokens=*" %i in ("2.html") do @(set w=%i && echo !w:/index.cgi=/!) chcp 932
実行結果は以下の通り。
<a href="http://my.favorite.jk/#jk">会長のブログ</a> <a href="http://index_cgi.com/?p=index.cgi">aho</a>
※遅延環境変数の展開を有効にするため、cmd.exeは/vオプションを付けて起動すること。
問④ Yahooトピックスの抽出
ダウンロードしたhtmlを解析する部分だけ。
BAT + gawk でやってみた。
type yahoo.html | findstr "<td>・" | awk "gsub(/<td>/, \"\n\", $0)" | awk -F"[<>]" "/・/{print $3}"
実行結果は以下の通り。
早朝の震度6弱「阪神」よぎる 阪神の余震か否か割れる見解 北が義務順守なら対話 米韓 消費税還元 業界と閣僚対立 世界初の子宮移植女性が妊娠 誕生日の岩隈 ダルに投げ勝つ 小野の芸術ループ 敵将も絶賛 青木アナ 矢部の門限は朝5時
※BATファイルでは文字列の置換が非常に難しいこと、置換後に改行にすることがほぼ不可能のため、Windows用のgawkバイナリを使用している。横着しているとも言う。
本気でWindows内だけでやるためには、専用のBATをjscriptなどを使用して作成する必要がある。近々やりたいな。
反省点・まとめ
- 当日、コマンドが足りず勉強会中にpkg_add -r していた。パッケージは事前に揃えてくること。
- 交通費がかかりすぎた。往復切符を買うなり、金券ショップでチケット買うなりしよう。
- 大阪→東京間で、新幹線は自由席で、定価で買うと、片道で13,240円もする。これは「大図書館の羊飼い 初回限定プレミアムパック」とほぼ同額である。
- 俺妹①巻の黒猫ばりのコミュ障を発揮していたので、ね。。。もう少し交流するようにせねば。
- 次回はLTで「それ、cmdでできるよ!」をやってみたい。
当日朝、震度6くらいの地震があって正直行けないかなぁ……と思っていたのですが、予想以上に早く電車が再開したため無事参加できました。さすが、地震には慣れていらっしゃる。
あと、これは非常に個人的な観点からの感想なのだけれど、チェック柄の服の人が意外と少なかった。