John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

あけましておめでとうございます!年賀状はシェル芸で!(結果&解説編)

再々度あけましておめでとうございます!John(新年3)です!

今回は下のブログの、結果&解説編としています!

john-bardera.hatenablog.com

早速ですが結果

結構頑張って書いたので、できればお手元の環境で動かしてほしい。。

その上で結果はこんな感じになります。

f:id:julia-bardera-jb:20190104004017p:plain
はっぴぃにゅうにゃあ

解説

はい解説です。

見てわかると思ってブログでの発言忘れてたんですが、シェルスクリプトです。

これを部分部分、つまみながら解説していきたいと思います。

コード全文

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は

john-bardera.hatenablog.com

です。

その次、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を入れています。なので、いらない1cutします。

この2進数数列は、202行ごとのものとして作っているので、foldコマンドで202文字ずつに分解。

while文で回して、2進数部分の0には1にはと代入しecho、出力します。

すると結果、

f:id:julia-bardera-jb:20190104004017p:plain
はっぴぃにゅうにゃあ

まとめ

awksedとか強すぎるコマンドを使用しないように心がけて作って見ました!結構自信作。

シェル芸楽しいので来年の年賀状もこういう感じで遊びたいと思います!

「もっとこういう書き方すると楽だよ!」とかありましたらお願いします!