概要
sed のデバッガとして sedsed というものが存在する模様.
使ってみたので書き出しておく.
・ja.stackoverflow.com -- sedの処理を追えるようデバッグプリントを出したい
sed 4.6 からは「--debug」というオプションがある模様
手順
1. pip でインストールする
$ pip install sedsed
2. sed スクリプトを書く
コードの内容は頻出の「連続する空行を 1行に束ねる」というものである.
ここでの要点は以下である.
・「sed」を「sedsed」に置き換える.
・「--debug」オプションを付ける.
・AnsiColor コードは煩いので「--nocolor」として無効にする.
・コード内の「EOL」〜「EOL」が sed に与えるデータである.
a.sh
#!/bin/bash
sedsed --debug --nocolor '
/^$/{
N
/^\n$/D
}
' <<EOL
aaaa
bbbb
cccc
EOL
通常 sed (sedsed不使用) 時の a.sh の実行結果
次のように連続する空行 3行が、1行にまとめられている.
aaaa
bbbb
cccc
3. デバッグ実行する
デバッグログが出る.
読み辛いと思うが、一応デバッグログの見方を後述した.
$ ./a.sh
PATT:aaaa$
HOLD:$
COMM:/^$/ {
PATT:aaaa$
HOLD:$
aaaa
PATT:bbbb$
HOLD:$
COMM:/^$/ {
PATT:bbbb$
HOLD:$
bbbb
PATT:$
HOLD:$
COMM:/^$/ {
COMM:N
PATT:\n$
HOLD:$
COMM:/^\n$/ D
PATT:$
HOLD:$
COMM:/^$/ {
COMM:N
PATT:\n$
HOLD:$
COMM:/^\n$/ D
PATT:$
HOLD:$
COMM:/^$/ {
COMM:N
PATT:\ncccc$
HOLD:$
COMM:/^\n$/ D
PATT:\ncccc$
HOLD:$
COMM:}
PATT:\ncccc$
HOLD:$
cccc
4. デバッグログの見方
sed を使う際は、紙に パターンスペースと ホールドスペース を書き出していたので助かる.
aureliojargas さん に感謝.
以上.