あけましておめでとうございます!年賀状はシェル芸で!(結果&解説編)
再々度あけましておめでとうございます!John(新年3)です!
今回は下のブログの、結果&解説編としています!
早速ですが結果
結構頑張って書いたので、できればお手元の環境で動かしてほしい。。
その上で結果はこんな感じになります。
解説
はい解説です。
見てわかると思ってブログでの発言忘れてたんですが、シェルスクリプトです。
これを部分部分、つまみながら解説していきたいと思います。
コード全文
echo "obase=2; ibase=10; "$(curl -s "http://john-bardera.hatenablog.com/entry/2019/01/02/205718" | grep -A2 "<p>HappyNewYear2019</p>" | tail -n1 | cut -d">" -f2 | cut -d"<" -f1) | bc | tr -d "\\\t\n" | paste -s - | cut -c 2- | fold -w202 | while read line; do echo ${line} | tr "0" "い" | tr "1" "亥"; done
ではまず、始めの方、$(curl ~~
の部分から
$(curl -s "http://john-bardera.hatenablog.com/entry/2019/01/02/205718" | grep -A2 "<p>HappyNewYear2019</p>" | tail -n1 | cut -d">" -f2 | cut -d"<" -f1)
まず、curlで引数で与えられているURLのHTMLを持ってきます。sオプションでエラーコードやプログレス的なのを表示しないようになります。ちなみにこのURLは
です。
その次、grep -A2 "<p>HappyNewYear2019</p>"
で、curlからのHTMLから<p>HappyNewYear2019</p>
とその後ろ2行を抜き出します。
これとその次tail -n1
より準備編に仕込んでおいたpタグで囲まれた謎の数列を抜き出せます。
次のcut達はpタグを除去するマンですね。
そしてこれらを$()
で囲うことで件の謎の数列を変数のように参照(?)でき、echo "obase=2; ibase=10; "$(~~
によって文字列の連結を行います。
では次、$()
以降ですね。
| bc | tr -d "\\\t\n" | paste -s - | cut -c 2- | fold -w202 | while read line; do echo ${line} | tr "0" "い" | tr "1" "亥"; done
まずbc
コマンドは先のecho
からobase~~謎の文字列
を受け取ります。これにより、もらった謎の数列を2進数に変換します。
その後、bc
コマンドは出力が長い場合、\\t\n
をところどころに入れてしまうので、tr
コマンドで除去。
pasteコマンドでそれらを連結します。
そして、謎の数列(2進数ver)は、頭が0
になることによる表示ずれを防ぐため、頭に1
を入れています。なので、いらない1
をcut
します。
この2進数数列は、202行ごとのものとして作っているので、fold
コマンドで202文字ずつに分解。
while文で回して、2進数部分の0
にはい
、1
には亥
と代入しecho
、出力します。
すると結果、
まとめ
awk
やsed
とか強すぎるコマンドを使用しないように心がけて作って見ました!結構自信作。
シェル芸楽しいので来年の年賀状もこういう感じで遊びたいと思います!
「もっとこういう書き方すると楽だよ!」とかありましたらお願いします!