这个 sed 结果中的最后一个换行符来自哪里?

Jus*_*ner 7 sed newlines

我正在学习 sed 的不同命令并做了一些实验。我正在尝试的命令是:

root:[~]# seq 7 | sed -n '1~2H; 2~2{G;p}'
2

1
4

1
3
6

1
3
5
root:[~]#
Run Code Online (Sandbox Code Playgroud)

我分析了命令,对我来说,数字后面的最后一个换行符5不应该存在。下面是我的分析。

在此处输入图片说明

根据我的分析,输出应该是具有红色背景的单元格。如您所见,没有最后一个换行符。我哪里错了?提前致谢。

mur*_*uru 10

p 添加换行符:

% printf 1 | sed 'p;s/1/2/'
1
2%
Run Code Online (Sandbox Code Playgroud)

可以看出, the2打印时没有尾随换行符,但它之前的 1 fromp是。

  • 请注意,在非 GNU `sed` 循环结束时的隐式打印也可能添加换行符,即使输入中没有换行符(非终止行实际上不是标准 `sed` 的有效输入)。 (5认同)

Jus*_*ner 6

我想我找到了答案。从位于https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html的 POSIX sed 文档中,它指出:

每当模式空间写入标准输出或命名文件时, sed 应立即在其后面添加一个换行符。

这意味着该p命令将始终打印模式空间以及换行符。这也解释了为什么在2\n\n1,4\n\n1\n3和之后有换行符6\n\n1\n3\n5

如果您认为这有什么问题,请纠正我。谢谢你。