ツイートで『sedsed』なるツールについて流れてきてたので、何だこりゃと思ったらどうやらsedスクリプトのデバッグとかができるツールらしい。 Pythonで書かれているようで、比較的昔からあるツールのようだ。

インストールは以下のコマンドで行える。

git clone https://github.com/aureliojargas/sedsed
cp sedsed/sedsed.py /usr/local/bin/sedsed

とりあえず、実際にデバッグをしてみよう。 以下のように、「--debug」オプションを付与して普通にsedを実行するように条件を入力する。

コマンド | sedsed --debug '条件'
[root@BS-PUB-CENT7-01 ~]# echo abcdaa | sedsed --debug 's/a/A/;s/a/Z/g'
PATT:abcdaa$
HOLD:$
COMM:s/a/A/
PATT:Abcdaa$
HOLD:$
COMM:s/a/Z/g
PATT:AbcdZZ$
HOLD:$
AbcdZZ

GNU拡張されたオプションとかには対応してなさそうなのだが、ラベルには対応してるようだ。

[root@BS-PUB-CENT7-01 ~]# echo ABCDEFG | sedsed --debug --hide=HOLD ':a;p;s/\(.\)\(.*\)/\2\1/;/^G/!ba'
PATT:ABCDEFG$
COMM::a
COMM:p
ABCDEFG
PATT:ABCDEFG$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:BCDEFGA$
COMM:/^G/ !b a
COMM:p
BCDEFGA
PATT:BCDEFGA$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:CDEFGAB$
COMM:/^G/ !b a
COMM:p
CDEFGAB
PATT:CDEFGAB$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:DEFGABC$
COMM:/^G/ !b a
COMM:p
DEFGABC
PATT:DEFGABC$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:EFGABCD$
COMM:/^G/ !b a
COMM:p
EFGABCD
PATT:EFGABCD$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:FGABCDE$
COMM:/^G/ !b a
COMM:p
FGABCDE
PATT:FGABCDE$
COMM:s/\(.\)\(.*\)/\2\1/
PATT:GABCDEF$
COMM:/^G/ !b a
PATT:GABCDEF$
GABCDEF

他の人のsed芸とかを解析するときに役に立つかもしれない。