有什么方法可以使用 sed 设置“详细模式”或“调试模式”?

don*_*sti 17 debugging sed gnu

有没有办法gnu sed详细说明运行的内容和完成的内容?
我想要一个类似“调试模式”的东西,这样我就可以看到 - 对于每一行输入 - 脚本运行前后的保持空间和模式空间的内容等。

Ste*_*itt 17

正如fra-san 提到的,GNU在 4.6 版中sed引入了一个--debug选项,它几乎可以满足您的需求;所以例如,如果你运行:

printf '%s\n' one two  | sed --debug 'H;1h;$x;$s/\n/_/g'
Run Code Online (Sandbox Code Playgroud)

输出是

SED PROGRAM:
  H
  1 h
  $ x
  $ s/\n/_/g
INPUT:   'STDIN' line 1
PATTERN: one
COMMAND: H
HOLD:    \none
COMMAND: 1 h
HOLD:    one
COMMAND: $ x
COMMAND: $ s/\n/_/g
END-OF-CYCLE:
one
INPUT:   'STDIN' line 2
PATTERN: two
COMMAND: H
HOLD:    one\ntwo
COMMAND: 1 h
COMMAND: $ x
PATTERN: one\ntwo
HOLD:    two
COMMAND: $ s/\n/_/g
MATCHED REGEX REGISTERS
  regex[0] = 3-4 '
'
PATTERN: one_two
END-OF-CYCLE:
one_two
Run Code Online (Sandbox Code Playgroud)

我不知道你使用的是什么发行版,但是这个版本的 sed(或更高版本)在 Debian 10Ubuntu 19.04和衍生版本中可用;它将在 Fedora 33 中可用。