该文件指出sed
将d
:
删除模式空间;立即开始下一个周期。
如果sed
在没有 的情况下运行-n
,是否会在命令sed
后自动打印模式空间d
?我知道在这种情况下,模式空间是空的。所以打印与不打印没有区别。但我只是好奇。
我有这个例子:
root@u1804:~# seq 10 | sed -r '/5/d'
1
2
3
4
6
7
8
9
10
root@u1804:~#
如您所见,没有5
.是因为d
直接执行到下一个循环还是自动打印模式空间打印了一个空字符串?
答案1
是的,d
重新启动循环,因此不会自动打印。很容易看出,如果您尝试在d
命令后附加到模式空间,例如 viaG
或s/^/STUFF/
没有打印任何内容...
尝试-即使您保存它,然后尝试将其附加到 via ,seq 3 | sed '1h;2d;2G'
它也不会打印两次,原因很简单最后一个命令永远不会执行 - 之后的所有内容(包括自动打印)都将被忽略(即对于当前地址)。1
1h
2G
d
标准非常明确:
如果没有命令显式启动新循环,则在脚本末尾,模式空间应复制到标准输出(除非
-n
指定),并且模式空间应被删除。
它也在您引用的手册:
默认情况下 sed 打印所有已处理的输入(已被诸如 之类的命令修改/删除的输入除外
d
)