シェル芸勉強会の動画。毎度すごい参考になる。
シェルにこんな三角形を表示するワンライナーはどう書くか?
こうやる。
$ echo ' ^^' | sed ':a p;s/ ^/^ /;b a' | head -n 5 | sed 1i.
すごい。
$ echo ' ^^' | sed ':a p;s/ ^/^ /;b a' | head -n 5 | sed 1i.
:a aというラベリングをするよ。あとでaとして使うよ
p プリント(画面に表示)せよ
s/ ^/^ / 半角スペース^ を ^半角スペースにせよ
b 直後にきたラベル文字(今回はa)に分岐せよ(:aで指示した処理をせよ)
つまり、a p;s/ ^/^ /; で示した処理をb a でループしてる。
これすごい。ワンライナーで、しかもsedの中でループしてるってことか。日々のbashでしょっちゅう使えそう。
sedのマニュアルも見ておく。
$ man sed
sed 1i.はオマケ。1行目にドットを表示(して見栄えをよく)せよ、というだけ。
表示する文字を/と\に変えて
sedの区切り文字を/から@に変えてみると
変更前 echo ' ^^' | sed ':a p;s/ ^/^ /;b a' | head -n 5 | sed 1i.
変更後 echo ' /\' | sed ':a p;s@ /@/ @;b a' | head -n 5 | sed 1i.
すごすぎ。
[fedora PT3]$ echo 'lCAgL1wKlCAvlCBcCiAvlCAglFwKLyAglCAglFwK77+j77+j77+j77+jCg=='|base64 --decode | sed '3s//👁/3;1s/^././'
/\
/ \
/ \
/ \
 ̄ ̄ ̄ ̄