文字列の一部だけecho-sdの吹き出しで囲むシェル芸を作ってみる

ふと、文字列の一部分だけをecho-sdで囲むような処理を作ってシェル芸botで遊ぼうと思い立ったので、やってみることにした。
文字列の一部分って何だよとなるが、具体的には以下のような出力。

   _人人人_
これが> 超 <ベジータだ!
    ̄Y^Y^Y^ ̄

 

じゃ、具体的にどうすればいいのかというと、以下のように一度echo-sdで囲む文字とそうでない文字で分解して、pasteで組み合わせたりしてやればいい。

sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!|sed -r '2!s/^/echo -e \\\\n/;s/.+/<(&)/'|eval paste `paste -{,,}`|sed 2\!s/^/`printf  %.s {1..3}`/|tr -d \\t
blacknon@BS-PUB-UBUNTU-01:~$ # 文字列を分解
blacknon@BS-PUB-UBUNTU-01:~$ sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!
これが
echo-sd 超
ベジータだ!
blacknon@BS-PUB-UBUNTU-01:~$ # echo-sd以外の箇所について頭にechoを付与
blacknon@BS-PUB-UBUNTU-01:~$ sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!|sed -r '2!s/^/echo -e \\\\n/;s/.+/<(&)/'
<(echo -e \\nこれが)
<(echo-sd 超 )
<(echo -e \\nベジータだ!)
blacknon@BS-PUB-UBUNTU-01:~$ # プロセス置換にしている各要素をpasteで結合
blacknon@BS-PUB-UBUNTU-01:~$ sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!|sed -r '2!s/^/echo -e \\\\n/;s/.+/<(&)/'|eval paste `paste -{,,}`
        _人人人_
これが  > 超 <      ベジータだ!
         ̄Y^Y^Y^ ̄
blacknon@BS-PUB-UBUNTU-01:~$ # 吹き出しのある1,3行目について、全角スペースでパディング
blacknon@BS-PUB-UBUNTU-01:~$ sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!|sed -r '2!s/^/echo -e \\\\n/;s/.+/<(&)/'|eval paste `paste -{,,}`|sed 2\!s/^/`printf  %.s {1..3}`/
     _人人人_
これが  > 超 <      ベジータだ!
      ̄Y^Y^Y^ ̄
blacknon@BS-PUB-UBUNTU-01:~$ # タブを削除
blacknon@BS-PUB-UBUNTU-01:~$ sed -r 's/超/\necho-sd & \n/' <<<これが超ベジータだ!|sed -r '2!s/^/echo -e \\\\n/;s/.+/<(&)/'|eval paste `paste -{,,}`|sed 2\!s/^/`printf  %.s {1..3}`/|tr -d \\t
   _人人人_
これが> 超 <ベジータだ!
    ̄Y^Y^Y^ ̄
Sponsored Links

これで、文字列の一部だけを吹き出し表示できたりする。
応用すれば、以下のように一文字ずつecho-sdで囲んだ文字列を連続で作成したりもできる。

seq 6|xargs -I@ bash -c 'echo プレミアムフライデー|sed -r "s/[^フ]|フライデー/\necho-sd &ッ!\n/@"|sed '\''/echo-sd/!s/^/echo -e \\\\n/g;;s/^/<(/g;s/$/)/g'\''|eval paste $(paste - - -)|sed '\''s/\t//g;2!s/^/'\''$(printf " %.s" {1..@})'\''/g;s/^ //g'\'''
blacknon@BS-PUB-UBUNTU-01:~$ seq 6|xargs -I@ bash -c 'echo プレミアムフライデー|sed -r "s/[^フ]|フライデー/\necho-sd &ッ!\n/@"|sed '\''/echo-sd/!s/^/echo -e \\\\n/g;;s/^/<(/g;s/$/)/g'\''|eval paste $(paste - - -)|sed '\''s/\t//g;2!s/^/'\''$(printf " %.s" {1..@})'\''/g;s/^ //g'\'''
_人人人人人_
> プッ! <レミアムフライデー
 ̄Y^Y^Y^Y^Y^ ̄
 _人人人人人_
プ> レッ! <ミアムフライデー
  ̄Y^Y^Y^Y^Y^ ̄
  _人人人人人_
プレ> ミッ! <アムフライデー
   ̄Y^Y^Y^Y^Y^ ̄
   _人人人人人_
プレミ> アッ! <ムフライデー
    ̄Y^Y^Y^Y^Y^ ̄
    _人人人人人_
プレミア> ムッ! <フライデー
     ̄Y^Y^Y^Y^Y^ ̄
     _人人人人人人人人人_
プレミアム> フライデーッ! <
      ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

 

昔なつかしの某炭酸飲料のCMのよみがなを吹き出しで出力させたりもできる。

blacknon@BS-PUB-UBUNTU-01:~$ seq 5|xargs -I@ bash -c 'sed -r "s/[^古鬱]|古鬱/\necho-sd \$(echo &|sed -e{y#吐露非#トロピ#,s#狩#カル#,s#古鬱#フルーツ#})!\n/@" <<<吐露非狩古鬱|sed -r "2!s/^/echo -e \"\\\n\"/;s/.+/<(&)/"|eval paste `paste -{,,}`|sed 2\!s/^/`printf  %.s {1..@}`/'|sed s/^ //|tr -d \\t
_人人人人_
> ト! <露非狩古鬱
 ̄Y^Y^Y^Y^ ̄
 _人人人人_
吐> ロ! <非狩古鬱
  ̄Y^Y^Y^Y^ ̄
  _人人人人_
吐露> ピ! <狩古鬱
   ̄Y^Y^Y^Y^ ̄
   _人人人人人_
吐露非> カル! <古鬱
    ̄Y^Y^Y^Y^Y^ ̄
    _人人人人人人人_
吐露非狩> フルーツ! <
     ̄Y^Y^Y^Y^Y^Y^Y^

 

ちなみに、シェル芸botにはコマンドの出力から画像やGIFを生成するスクリプトが入ってるので、それを利用すれば以下のようにGIFにして遊ぶこともできる。

 

…まぁ、特にこれができたところで何の役にも立たないのだけど(´・ω・`)。
そこは気にしてはいけない。

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*