(Linux)banner すべてがFになる

4-3.文字列置換


アニメ『すべてがFになる THE PERFECT INSIDER』(2015)
エンジニアの私から見たら神様ともいうべき作家、 森博嗣 の小説が原作です。ドラマも2014に放送されてましたね、まだ見てませんが。
UNIX/LINUX好きにはたまらない設定です。天才が登場するってところも良いです。コンピュータ触ってると、キーをタタターンと打って、あっさり問題解決するのに、憧れますよね。暗算もコンピュータ並に早くできるとかっこいいし、かしこい連中よりも先回りして、あっと驚かせたりしたい。
アニメは、毎話ゆっくり進みます。あれ、こんだけ、っていうくらい。なので、レンタルで全部借りて一気に見るぐらいの方が良いです。

bannerinbanner-001
バナーコマンドで、Fを作ってみました。バナー・イン・バナーです。

banner(sysvbanner)は、引数に複数の文字列を指定すると、以下のように改行されてバナー表示されます。

takk@deb83:~$ banner AAAA BBBB CCCC
   #       #       #       #
  # #     # #     # #     # #
 #   #   #   #   #   #   #   #
#     # #     # #     # #     #
####### ####### ####### #######
#     # #     # #     # #     #
#     # #     # #     # #     #

######  ######  ######  ######
#     # #     # #     # #     #
#     # #     # #     # #     #
######  ######  ######  ######
#     # #     # #     # #     #
#     # #     # #     # #     #
######  ######  ######  ######

 #####   #####   #####   #####
#     # #     # #     # #     #
#       #       #       #
#       #       #       #
#       #       #       #
#     # #     # #     # #     #
 #####   #####   #####   #####

takk@deb83:~$ 

これを利用して、bannerの結果でbannerを作ってみましょう。

まず、スペースが大事なので、バナー中のスペースは、他の文字に変更しておきます。

takk@deb83:~$ banner A | tr ' ' .
...#
..#.#
.#...#
#.....#
#######
#.....#
#.....#

takk@deb83:~$ 

次に、改行もスペースに変更します。trの次席にならべればよいです。

takk@deb83:~$ banner A | tr ' \n' '. '
...# ..#.# .#...# #.....# ####### #.....# #.....#  takk@deb83:~$ 

これを、xargsでbannerに渡すと、

takk@deb83:~$ banner A | tr ' \n' '. ' | xargs banner
                          # #
                          # #
                        #######
                          # #
  ###     ###     ###   #######
  ###     ###     ###     # #
  ###     ###     ###     # #

                  # #             # #
                  # #             # #
                #######         #######
                  # #             # #
  ###     ###   #######   ###   #######
  ###     ###     # #     ###     # #
  ###     ###     # #     ###     # #

          # #                             # #
          # #                             # #
        #######                         #######
          # #                             # #
  ###   #######   ###     ###     ###   #######
  ###     # #     ###     ###     ###     # #
  ###     # #     ###     ###     ###     # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######   ###     ###     ###     ###     ###   #######
  # #     ###     ###     ###     ###     ###     # #
  # #     ###     ###     ###     ###     ###     # #

  # #     # #     # #     # #     # #     # #     # #
  # #     # #     # #     # #     # #     # #     # #
####### ####### ####### ####### ####### ####### #######
  # #     # #     # #     # #     # #     # #     # #
####### ####### ####### ####### ####### ####### #######
  # #     # #     # #     # #     # #     # #     # #
  # #     # #     # #     # #     # #     # #     # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######   ###     ###     ###     ###     ###   #######
  # #     ###     ###     ###     ###     ###     # #
  # #     ###     ###     ###     ###     ###     # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######   ###     ###     ###     ###     ###   #######
  # #     ###     ###     ###     ###     ###     # #
  # #     ###     ###     ###     ###     ###     # #

takk@deb83:~$ 

どかんと大きなバナーになりますね。ドットが邪魔なので、###を空白に置換しましょう。perlで置換します。

takk@deb83:~$ banner A | tr ' \n' '. ' | xargs banner | perl -pe 's/[^#]###[^#]/     /g'
                          # #
                          # #
                        #######
                          # #
                        #######
                          # #
                          # #

                  # #             # #
                  # #             # #
                #######         #######
                  # #             # #
                #######         #######
                  # #             # #
                  # #             # #

          # #                             # #
          # #                             # #
        #######                         #######
          # #                             # #
        #######                         #######
          # #                             # #
          # #                             # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######                                         #######
  # #                                             # #
  # #                                             # #

  # #     # #     # #     # #     # #     # #     # #
  # #     # #     # #     # #     # #     # #     # #
####### ####### ####### ####### ####### ####### #######
  # #     # #     # #     # #     # #     # #     # #
####### ####### ####### ####### ####### ####### #######
  # #     # #     # #     # #     # #     # #     # #
  # #     # #     # #     # #     # #     # #     # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######                                         #######
  # #                                             # #
  # #                                             # #

  # #                                             # #
  # #                                             # #
#######                                         #######
  # #                                             # #
#######                                         #######
  # #                                             # #
  # #                                             # #

takk@deb83:~$ 

さて、#のままです。trの末席にAを加えればよいです。

takk@deb83:~$ banner A | tr ' \n#' '. A' | xargs banner | perl -pe 's/[^#]###[^#]/     /g'

こうなります。
bannerinbanner-002

AをFにすると、すべてがFになります。

コメント

タイトルとURLをコピーしました