ツイートで『sedsed』なるツールについて流れてきてたので、何だこりゃと思ったらどうやらsedスクリプトのデバッグとかができるツールらしい。 Pythonで書かれているようで、比較的昔からあるツールのようだ。
インストールは以下のコマンドで行える。
bash
git clone https://github.com/aureliojargas/sedsed
cp sedsed/sedsed.py /usr/local/bin/sedsed
とりあえず、実際にデバッグをしてみよう。 以下のように、「--debug」オプションを付与して普通にsedを実行するように条件を入力する。
bash
コマンド | sedsed --debug '条件'
shell[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拡張されたオプションとかには対応してなさそうなのだが、ラベルには対応してるようだ。
shell[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芸とかを解析するときに役に立つかもしれない。