sed实用程序中的'd'命令

Jus*_*ner 7 sed

从sed文档:

d      Delete the pattern space; immediately start next cycle.
Run Code Online (Sandbox Code Playgroud)

下一个周期意味着什么?我的理解是sed不会在d命令之后应用以下命令,它开始从输入流中读取下一行并处理它.但似乎这不是真的.看这个例子:

[root@localhost ~]# cat -A test.txt
aaaaaaaaaaaaaa$
$
bbbbbbbbbbbbb$
$
$
ccccccccc$
ddd$
$
eeeeeee$
[root@localhost ~]# cat test.txt | sed '/^$/d;p;p'
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
bbbbbbbbbbbbb
bbbbbbbbbbbbb
bbbbbbbbbbbbb
ccccccccc
ccccccccc
ccccccccc
ddd
ddd
ddd
eeeeeee
eeeeeee
eeeeeee
[root@localhost ~]# 
Run Code Online (Sandbox Code Playgroud)

如果立即开始下一个循环,p命令将没有任何输出.

有人可以帮我解释一下吗?谢谢.

Mic*_*ber 8

这意味着sed将读取下一行并开始处理它.

您的测试脚本没有按您的想法执行.它匹配空行并将delete命令应用于它们.它们没有出现,因此打印语句不会应用于空行.两个打印命令未连接到删除命令的模式,因此非空行打印三次.如果你改为尝试

sed '/./d;p;p' test.txt # matches all non-empty lines
Run Code Online (Sandbox Code Playgroud)

除空白行外不会打印任何内容,每次打印三次.