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

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

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

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

1
4

1
3
6

1
3
5
root:[~]#

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

在此输入图像描述

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

答案1

p添加换行符:

% printf 1 | sed 'p;s/1/2/'
1
2%

可以看出,2打印的 没有尾随换行符,但它前面的 1,来自p, 是。

答案2

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

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

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

如果您认为本文有什么问题,请指正。谢谢。

相关内容