LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-18

概要

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. デバッグログの見方

image.png

 

sed を使う際は、紙に パターンスペースと ホールドスペース を書き出していたので助かる.

aureliojargas さん に感謝.

 

以上.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1