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

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

### やったことなど
#### ※実機環境
  • Windows7 + 自作コマンド環境(Batlibrary)
  • FreeBSD 8.3 (Windows7 上のVMWare Player で稼働。ターミナルにはteratermを使用し、sshで接続)
    • 実のところX Window System(漢は黙ってtwm)でやりたかったんだけども、セットアップが間に合わず。
#### 問① 肩慣らし ```sh cat 2.html | sed 's/index\.cgi//g'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<br/>


</div>
<div class="section">
    #### 問② urlの抜き出し
    <a href="https://twitter.com/kunst1080/status/322948178238373888">https://twitter.com/kunst1080/status/322948178238373888</a>
```sh
cat 1.html | sed &#39;s/href=/\
/g&#39; | sed &#39;s/>//g&#39; | sed &#39;s/\"//g&#39; | sed &#39;s/&lt;\/a//g&#39; | grep http

```少し間違っていた。この解き方では2行目の右端がおかしくなる。<br/>
正しくは
```sh
cat 1.html | sed &#39;s/href=/\
/g&#39; | sed &#39;s/>//g&#39; | sed &#39;s/\"/\
/g&#39; | sed &#39;s/&lt;\/a/\
/g&#39; | grep http

```ちなみに、awkを使ったら一撃で書ける。
```sh
awk -F\" &#39;/http/{print $2}&#39; 1.html

#### 問③ HTMLの整形 https://twitter.com/kunst1080/status/322951117359169537 ```sh cat 3.html \ | sed 's///g' \ | grep -v "^$" \ | sed 's/ //g'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
正しくは下記
```sh
cat 3.html \
| gsed &#39;s;;\n;g&#39; \
| gsed &#39;s;;\t\t;g&#39;

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


</div>
<div class="section">
    #### 問④ 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
一応、模範解答をコピペ。 ```sh cat numref| nkf --numchar-input cat numref| w3m -T text/html -dump # なんだか化ける
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</div>
<div class="section">
    #### 問⑥ POST
    pkg_add -r curl<br/>
pkg_add -r wget<br/>
に非常時に時間がかかった &amp;&amp; さっぱりできなかったorz模範解答をコピペ。
```sh
wget --post-data a=aho http://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgi -O -

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


</div>
<div class="section">
    #### 問⑦ 本日の気温をワンライナーで取得
    infoseek天気の「アメダスランキング」が非常に加工しやすい形をしていたので……
```sh
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;

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


</div>
<div class="section">
    #### 問⑧ 画像のダウンロード
    ※URL=<a href="http://headlines.yahoo.co.jp/hl">http://headlines.yahoo.co.jp/hl</a><a href="https://twitter.com/kunst1080/status/322974102304460800">https://twitter.com/kunst1080/status/322974102304460800</a>
```sh
curl $URL | sed -e &#39;s/http:/\
http:/g&#39; | sed &#39;s/jpg.*/jpg\
/g&#39; | grep jpg | xargs -I % echo %

```短くするとこうなる<br/>
<a href="https://twitter.com/kunst1080/status/322976906544824320">https://twitter.com/kunst1080/status/322976906544824320</a>
```sh
curl $URL | sed &#39;s/src=/\
src=/g&#39; | egrep &#39;(jpg|jpeg|png|gif)&#39; | awk -F\" &#39;"src="{print $2}&#39;

#### 問⑨ クローリング 玄人からのツッコミで、「それ、wgetでできるよ」的な会話があって、下記の通り(模範解答ママ) ```sh wget -r http://yahoo.co.jp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 

</div>
</div>
<div class="section">
    ### おまけ ―― それ、cmd.exe(コマンドプロンプト)でできるよ!
    ※非常に残念ながら、一部しか解くことができなかった。

<div class="section">
    #### 問① 肩慣らし
    <a href="https://twitter.com/kunst1080/status/322946314444881922">https://twitter.com/kunst1080/status/322946314444881922</a>
```dosbatch
chcp 65001
for /f "usebackq tokens=*" %i in ("2.html") do @(set w=%i &amp;&amp; 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>

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<br/>


</div>
<div class="section">
    #### 問④ Yahooトピックスの抽出
    ダウンロードしたhtmlを解析する部分だけ。<br/>
BAT + gawk でやってみた。
```dosbatch
type yahoo.html | findstr "・"  | awk "gsub(//, \"\n\", $0)" | awk -F"[&lt;>]" "/・/{print $3}"

```実行結果は以下の通り。

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
本気でWindows内だけでやるためには、専用のBATをjscriptなどを使用して作成する必要がある。近々やりたいな。<br/>
 

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

</div>