ヘコたれそうな、というよりヘコたれる超忙しさでしたが、なんとかシェル芸勉強会の福岡サテライトを開催することが出来ました。会場は久しぶりにAIP Cafeでした。 問題出題と解説の上田さん、ありがとうございます。参加者の皆様もお疲れ様でした。
今日は結構涼しくなりましたが、午前中は雨が降って湿度が高めで会場到着時には結構汗だくでした。 今回福岡サテライトでは総勢6人の参加者が集いました。初参加の方もいらっしゃいました。
勉強会の情報
勉強会主催者上田さんが公開されているリンク集をご覧ください。
午前の部
「eval系超絶ワンライナー教祖」の鳥海さんによるPerl入門第二回でした。今回の話題は、本題?であるPerlの正規表現でした。 私は大学の学部生時代まではコンピュータを全く触ったことがなかったのですが、理学系の大学院生になってからはデータを扱うことが多くなり、データ処理のためにPerlやシェルスクリプトをやり始めた記憶があリます。
昼食
お昼は参加者みんなで会場近くのラーメン屋さん「一風堂」に行きました。知らなかったのだがここが本店らしいです。美味かったですね。
http://www.ippudo.com/store/daimyo/
Webシステムでの決済に関する話題が上がったりしました。決済やったことないですね。
午後の部
今回はイントロのスライドとか準備出来てなかったので、とりあえず一息つきました。 せっかくなので持ってきたSoftware Design 9月号の宣伝をしました。
SoftwareDesign9月号、明日発売https://t.co/hsW7dVTxPd
— SoftwareDesign (@gihyosd) 2017年8月17日
上田監督率いるシェル芸最強チームが仕掛ける、衝撃の新連載『シェル芸人からの挑戦状』推参!
今回も福岡サテライトなりのペースで進めていきました。自分なりに考えて解説した内容を下記に記載いたします。
Q1
Markdown形式で書かれたテキストファイルが複数のディレクトリ内にばらまかれていて、最初に出現するKeywordsの行のみを収集する問題でした。
簡単なようでうまくさばくことが出来きませんでした。
出題者上田さんの解答解説を聞いて、grep
コマンドの-m
オプションについて知見を得ました。
Q2
これはsed
の置換に慣れるための練習問題でした。
後方参照や正規表現の最長一致についてなど解説しながら考えましたがギブアップでした。
正規表現の最長一致についてはgrep -o
を使ってこんな感じで解説しました。
"
でクォーティングされた範囲を指定する場合について。
# "が複数ある場合には最長の長さでマッチする。 $ echo '<li><a href="/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html">ふげ</a></li>' | grep -o '".*"' "/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html" # "[^"][^"]*"という具合に指定すれば意図した範囲にマッチする。 $ echo '<li><a href="/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html">ふげ</a></li>' | grep -o '"[^"][^"]*"' "/files/https://blog.ueda.tech/" "/files/huge.html"
Q3
力技でゴリゴリやる方法を考えていたのですが、pandoc
の使い方を復習する問題でした。pandoc
便利ですね。
Q4
GitHubにリポジトリを作るhub
コマンドってのがあるのを知りました。
福岡サテライトではnc
コマンド(netcat)について少し解説をしました。
Q5
色々やったがギブアップでした。福岡ではbc
コマンドについて解説しました。下記は1行目と2号目を掛け算する例です。
$ echo -e '5\n8' | xargs | tr ' ' '*' | bc 40
Q6
フィボナッチ数列について色々調べてみました。 自然界に多く存在し、花の花弁数やヒマワリの種の数、その他黄金比率など色々と役に立つらしいですスゴイ。 そんなことを調ベているうちに、問題を考える時間が無くなる始末です。
Q7
ようやくまともに解けた唯一の問題でした。 bashのループを使いましたが、出題者上田さんからループを使わない解答例の解説もありました。
$ seq -w 00 99 | while read n; do grep -q $n nums || echo $n; done 31 33 42 43 56 61 64 65
Q8
アルファベットをasciiコードに変換して、引き算して数を数える方法を考えました。
結局何行目が一番多いか?という解答しか思いつきませんでした。
MacやFreeBSDの場合は、3つ目のコマンドはGNU sedのgsed
を使いました。
$ cat alphabet | xxd -p -u | sed 's/2D/-/g;s/0A/\n/g' | ( echo ibase=16; cat ) | bc | tr -d '-' | awk '{print NR,$i}' | sort -k2,2nr | awk 'NR==1{print $1}' 2
午後の部終了後
今回はあまりの忙しさゆえに、イントロスライドやLTなど準備が出来ませんでした。 福岡サテライトでは基本的に私の解説や話を中心に進めていっているのですが、 参加者の方が何か話題を提供出来るような場も良いなあと思ったりしています。
大阪サテライトを主催されているくんすとさんのこの意見が、実にマトを得ていると思った。ハードルを低くしていきたい。
なんなら自己紹介だけとかコマンド一発打つだけとかそれくらいのでもおkです!! #シェル芸 #大阪
— くんすと (@kunst1080) 2017年8月26日