この記事は約11分56秒で読むことができます。

sed 一文字ずつ切り取って後ろにくっ付ける話

参考文献

このお方のtwwiterのシェル芸大好きです。

sedのデバッグやHTML化ができる『sedsed』  

まえがき

折角だからpythonデバッグツールあるぽいので、それでsedと仲良くなりたい。

コード表示

[oracle@centos ~]$ git clone https://github.com/aureliojargas/sedsed
[oracle@centos ~]$ sudo cp sedsed/sedsed.py /usr/local/bin/sedsed
[sudo] oracle のパスワード:
[oracle@centos ~]$ sedsed --version
sedsed v1.2-dev

響け!ユーフォニアム

あるアニメのタイトルらしい。

sedは標準入力をPS(パターンスペース)に1行ずつ取り込む。pコマンドはPSにある中身を出力する。sは置換コマンドで直前のPSに対して処理する。/^ム/はムで始まるPSの意味。!付けているからムで始まらないPSをコマンドのアドレス条件に指定してる。bコマンドはアドレス条件を満たすときは指定したラベルにjumpする。ここでのラベルはaラベル。標準入力が最初1行だけだが、各スクリプトの実行結果をPSに保持して、そのPSにスクリプトを繰り返し実行し、出力しているところが面白い!!ループ処理なので、終了条件書くこと!

コード表示

[oracle@centos ~]$ echo 響け!ユーフォニアム | sed ':a;p;s/\(.\)\(.*\)/\2\1/;/^ム/!ba' | nl
     1	響け!ユーフォニアム
     2	け!ユーフォニアム響
     3	!ユーフォニアム響け
     4	ユーフォニアム響け!
     5	ーフォニアム響け!ユ
     6	フォニアム響け!ユー
     7	ォニアム響け!ユーフ
     8	ニアム響け!ユーフォ
     9	アム響け!ユーフォニ
    10	ム響け!ユーフォニア

デバッグしてみたやつ

コード表示

[oracle@centos ~]$ echo 響け!ユーフォニアム | sedsed --debug ':a;p;s/\(.\)\(.*\)/\2\1/;/^ム/!ba'
PATT:\351\237\277\343\201\221\357\274\201\343\203\246\343\203\274\343\
\203\225\343\202\251\343\203\213\343\202\242\343\203\240$
HOLD:$
COMM::a
COMM:p
響け!ユーフォニアム
PATT:\351\237\277\343\201\221\357\274\201\343\203\246\343\203\274\343\
\203\225\343\202\251\343\203\213\343\202\242\343\203\240$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\201\221\357\274\201\343\203\246\343\203\274\343\203\225\343\
\202\251\343\203\213\343\202\242\343\203\240\351\237\277$
HOLD:$
COMM:/^ム/ !b a
COMM:p
け!ユーフォニアム響
PATT:\343\201\221\357\274\201\343\203\246\343\203\274\343\203\225\343\
\202\251\343\203\213\343\202\242\343\203\240\351\237\277$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\357\274\201\343\203\246\343\203\274\343\203\225\343\202\251\343\
\203\213\343\202\242\343\203\240\351\237\277\343\201\221$
HOLD:$
COMM:/^ム/ !b a
COMM:p
!ユーフォニアム響け
PATT:\357\274\201\343\203\246\343\203\274\343\203\225\343\202\251\343\
\203\213\343\202\242\343\203\240\351\237\277\343\201\221$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\203\246\343\203\274\343\203\225\343\202\251\343\203\213\343\
\202\242\343\203\240\351\237\277\343\201\221\357\274\201$
HOLD:$
COMM:/^ム/ !b a
COMM:p
ユーフォニアム響け!
PATT:\343\203\246\343\203\274\343\203\225\343\202\251\343\203\213\343\
\202\242\343\203\240\351\237\277\343\201\221\357\274\201$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\203\274\343\203\225\343\202\251\343\203\213\343\202\242\343\
\203\240\351\237\277\343\201\221\357\274\201\343\203\246$
HOLD:$
COMM:/^ム/ !b a
COMM:p
ーフォニアム響け!ユ
PATT:\343\203\274\343\203\225\343\202\251\343\203\213\343\202\242\343\
\203\240\351\237\277\343\201\221\357\274\201\343\203\246$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\203\225\343\202\251\343\203\213\343\202\242\343\203\240\351\
\237\277\343\201\221\357\274\201\343\203\246\343\203\274$
HOLD:$
COMM:/^ム/ !b a
COMM:p
フォニアム響け!ユー
PATT:\343\203\225\343\202\251\343\203\213\343\202\242\343\203\240\351\
\237\277\343\201\221\357\274\201\343\203\246\343\203\274$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\202\251\343\203\213\343\202\242\343\203\240\351\237\277\343\
\201\221\357\274\201\343\203\246\343\203\274\343\203\225$
HOLD:$
COMM:/^ム/ !b a
COMM:p
ォニアム響け!ユーフ
PATT:\343\202\251\343\203\213\343\202\242\343\203\240\351\237\277\343\
\201\221\357\274\201\343\203\246\343\203\274\343\203\225$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\203\213\343\202\242\343\203\240\351\237\277\343\201\221\357\
\274\201\343\203\246\343\203\274\343\203\225\343\202\251$
HOLD:$
COMM:/^ム/ !b a
COMM:p
ニアム響け!ユーフォ
PATT:\343\203\213\343\202\242\343\203\240\351\237\277\343\201\221\357\
\274\201\343\203\246\343\203\274\343\203\225\343\202\251$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\202\242\343\203\240\351\237\277\343\201\221\357\274\201\343\
\203\246\343\203\274\343\203\225\343\202\251\343\203\213$
HOLD:$
COMM:/^ム/ !b a
COMM:p
アム響け!ユーフォニ
PATT:\343\202\242\343\203\240\351\237\277\343\201\221\357\274\201\343\
\203\246\343\203\274\343\203\225\343\202\251\343\203\213$
HOLD:$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:\343\203\240\351\237\277\343\201\221\357\274\201\343\203\246\343\
\203\274\343\203\225\343\202\251\343\203\213\343\202\242$
HOLD:$
COMM:/^ム/ !b a
PATT:\343\203\240\351\237\277\343\201\221\357\274\201\343\203\246\343\
\203\274\343\203\225\343\202\251\343\203\213\343\202\242$
HOLD:$
ム響け!ユーフォニア

Leave a Reply

Your email address will not be published. Required fields are marked *