sedのデバッガ「sedsed」を使ってみる


概要

sed のデバッガとして sedsed というものが存在する模様.
使ってみたので書き出しておく.

ja.stackoverflow.com -- sedの処理を追えるようデバッグプリントを出したい

sed 4.6 からは「--debug」というオプションがある模様 https://unix.stackexchange.com/questions/492871/any-way-to-have-a-verbose-mode-or-debug-mode-with-sed

手順

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 さん に感謝.

 

以上.