运行不带-n的sed,d命令会跳过默认自动打印模式空间内容吗?

运行不带-n的sed,d命令会跳过默认自动打印模式空间内容吗?

该文件指出sedd

删除模式空间;立即开始下一个周期。

如果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命令后附加到模式空间,例如 viaGs/^/STUFF/没有打印任何内容...
尝试-即使您保存它,然后尝试将其附加到 via ,seq 3 | sed '1h;2d;2G'它也不会打印两次,原因很简单最后一个命令永远不会执行 - 之后的所有内容(包括自动打印)都将被忽略(即对于当前地址)。11h2Gd
标准非常明确:

如果没有命令显式启动新循环,则在脚本末尾,模式空间应复制到标准输出(除非-n指定),并且模式空间应被删除。

它也在您引用的手册:

默认情况下 sed 打印所有已处理的输入(已被诸如 之类的命令修改/删除的输入除外d

相关内容