くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

「第4回春爛漫シェル芸人撩乱勉強会&第22回勝手に新歓定例会」あそびきにました

「第4回春爛漫シェル芸人撩乱勉強会&第22回勝手に新歓定例会」に参加して来ました!

その時のメモやらなにやらをここに。

概要

会長さんからシェルの問題が出題され、それをみんなで黙々(?)と解いていくような形式でした。
初心者には玄人のフォローが着くとのことでしたが、ちょっと頑張って一般枠に。
(初参加だったし、初心者ですって言っても良かったのかもしれない)

やったことなど

※実機環境

  • 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行にが2回出てくるし。
正しくは下記

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くらいの地震があって正直行けないかなぁ……と思っていたのですが、予想以上に早く電車が再開したため無事参加できました。さすが、地震には慣れていらっしゃる。

あと、これは非常に個人的な観点からの感想なのだけれど、チェック柄の服の人が意外と少なかった