「第4回春爛漫シェル芸人撩乱勉強会&第22回勝手に新歓定例会」に参加して来ました!その時のメモやらなにやらをここに。

概要

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

各種資料

 

やったことなど

※実機環境

  • Windows7 + 自作コマンド環境(Batlibrary)
  • FreeBSD 8.3 (Windows7 上のVMWare Player で稼働。ターミナルにはteratermを使用し、sshで接続)
    • 実のところX Window System(漢は黙ってtwm)でやりたかったんだけども、セットアップが間に合わず。

問① 肩慣らし

1
2
cat 2.html | sed 's/index\.cgi//g'

説明は割愛。

問② urlの抜き出し

https://twitter.com/kunst1080/status/322948178238373888

1
2
3
cat 1.html | sed 's/href=/\
/g' | sed 's/>//g' | sed 's/\"//g' | sed 's/<\/a//g' | grep http

少し間違っていた。この解き方では2行目の右端がおかしくなる。
正しくは

1
2
3
4
5
cat 1.html | sed 's/href=/\
/g' | sed 's/>//g' | sed 's/\"/\
/g' | sed 's/<\/a/\
/g' | grep http

ちなみに、awkを使ったら一撃で書ける。

1
2
awk -F\" '/http/{print $2}' 1.html

問③ HTMLの整形

https://twitter.com/kunst1080/status/322951117359169537

1
2
3
4
5
cat 3.html \
| sed 's///g' \
| grep -v "^$" \
| sed 's/	//g'

結構間違えていた。1行にが2回出てくるし。
正しくは下記

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat 3.html \
| gsed 's;;\n;g' \
| gsed 's;;\t\t;g'

```gsed強いわぁ・・・<br/>
<br/>




#### 問④ Yahooトピックスの抽出
<a href="https://twitter.com/kunst1080/status/322954715539324928">https://twitter.com/kunst1080/status/322954715539324928</a>

```sh
cat yahoo.html|sed &#39;s//\
/g&#39; | sed &#39;s/&lt;\/td>/&lt;\/td>\
/g&#39; | grep &#39;&#39; | grep "・" | awk -F\> &#39;{print $3}&#39; | sed &#39;s/&lt;\/a//g&#39;

問⑤ 数値参照の変換

pkg_add -r nkf してる間に終了orz
一応、模範解答をコピペ。

1
2
3
cat numref| nkf --numchar-input
cat numref| w3m -T text/html -dump # なんだか化ける

問⑥ POST

pkg_add -r curl
pkg_add -r wget
に非常時に時間がかかった && さっぱりできなかったorz模範解答をコピペ。

1
2
wget --post-data a=aho http://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgi -O -

※-Oオプションで出力先を指定、-で標準出力を表すとのこと。

問⑦ 本日の気温をワンライナーで取得

infoseek天気の「アメダスランキング」が非常に加工しやすい形をしていたので……

1
2
3
4
5
curl -s http://infoseek.tenki.jp/forecast/pref-16.html \
| grep -B 2| tr -d "\n" \
| gsed "s/--/\n/g" \
| awk -F"[\"&lt;>]" &#39;/todouhuken/{print $9" "$21" "$29}&#39;

※もしかしたら、アメダスランキングではダメなのかもしれないぞ

問⑧ 画像のダウンロード

※URL=http://headlines.yahoo.co.jp/hlhttps://twitter.com/kunst1080/status/322974102304460800

1
2
3
4
curl $URL | sed -e &#39;s/http:/\
http:/g&#39; | sed &#39;s/jpg.*/jpg\
/g&#39; | grep jpg | xargs -I % echo %

短くするとこうなる
https://twitter.com/kunst1080/status/322976906544824320

1
2
3
curl $URL | sed &#39;s/src=/\
src=/g&#39; | egrep &#39;(jpg|jpeg|png|gif)&#39; | awk -F\" &#39;"src="{print $2}&#39;

問⑨ クローリング

玄人からのツッコミで、「それ、wgetでできるよ」的な会話があって、下記の通り(模範解答ママ)

1
2
wget -r http://yahoo.co.jp

無慈悲なアレ
 

おまけ ―― それ、cmd.exe(コマンドプロンプト)でできるよ!

※非常に残念ながら、一部しか解くことができなかった。

問① 肩慣らし

https://twitter.com/kunst1080/status/322946314444881922

1
2
3
4
chcp 65001
for /f "usebackq tokens=*" %i in ("2.html") do @(set w=%i &amp;&amp; echo !w:/index.cgi=/!)
chcp 932

実行結果は以下の通り。

1
2
&lt;a href="http://my.favorite.jk/#jk">会長のブログ&lt;/a>
&lt;a href="http://index_cgi.com/?p=index.cgi">aho&lt;/a>

※遅延環境変数の展開を有効にするため、cmd.exeは/vオプションを付けて起動すること。

問④ Yahooトピックスの抽出

ダウンロードしたhtmlを解析する部分だけ。
BAT + gawk でやってみた。

1
2
type yahoo.html | findstr "・"  | awk "gsub(//, \"\n\", $0)" | awk -F"[&lt;>]" "/・/{print $3}"

実行結果は以下の通り。

1
2
3
4
5
6
7
8
早朝の震度6弱「阪神」よぎる
阪神の余震か否か割れる見解
北が義務順守なら対話 米韓
消費税還元 業界と閣僚対立
世界初の子宮移植女性が妊娠
誕生日の岩隈 ダルに投げ勝つ
小野の芸術ループ 敵将も絶賛
青木アナ 矢部の門限は朝5時

※BATファイルでは文字列の置換が非常に難しいこと、置換後に改行にすることがほぼ不可能のため、Windows用のgawkバイナリを使用している。横着しているとも言う。
本気でWindows内だけでやるためには、専用のBATをjscriptなどを使用して作成する必要がある。近々やりたいな。
 

反省点・まとめ

  • 当日、コマンドが足りず勉強会中にpkg_add -r していた。パッケージは事前に揃えてくること。
  • 交通費がかかりすぎた。往復切符を買うなり、金券ショップでチケット買うなりしよう。
    • 大阪→東京間で、新幹線は自由席で、定価で買うと、片道で13,240円もする。これは「大図書館の羊飼い 初回限定プレミアムパック」とほぼ同額である。
  • 俺妹①巻の黒猫ばりのコミュ障を発揮していたので、ね。。。もう少し交流するようにせねば。
  • 次回はLTで「それ、cmdでできるよ!」をやってみたい。
 
当日朝、震度6くらいの地震があって正直行けないかなぁ……と思っていたのですが、予想以上に早く電車が再開したため無事参加できました。さすが、地震には慣れていらっしゃる。あと、これは非常に個人的な観点からの感想なのだけれど、**チェック柄の服の人が意外と少なかった**。