Just a learner Asked: 2019-08-29 23:24:40 +0800 CST2019-08-29 23:24:40 +0800 CST 2019-08-29 23:24:40 +0800 CST 这个 sed 的结果中最后一个换行符来自哪里? 772 我正在学习 sed 的不同命令并做了一些实验。我正在尝试的命令是: root:[~]# seq 7 | sed -n '1~2H; 2~2{G;p}' 2 1 4 1 3 6 1 3 5 root:[~]# 我分析了命令,对我来说,数字后面的最后一个换行符5不应该存在。下面是我的分析。 根据我的分析,输出应该是红色背景的单元格。如您所见,没有最后一个换行符。我哪里错了?提前致谢。 sed newlines 2 个回答 Voted Best Answer muru 2019-08-29T23:40:59+08:002019-08-29T23:40:59+08:00 p添加换行符: % printf 1 | sed 'p;s/1/2/' 1 2% 可以看出,2打印的 the 没有尾随换行符,但它前面的 1 fromp是。 Just a learner 2019-08-30T08:19:53+08:002019-08-30T08:19:53+08:00 我想我找到了答案。从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。 如果您认为这有什么问题,请纠正我。谢谢你。
p
添加换行符:可以看出,
2
打印的 the 没有尾随换行符,但它前面的 1 fromp
是。我想我找到了答案。从https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html的 POSIX sed 文档中,它指出:
这意味着该
p
命令将始终打印模式空间以及换行符。2\n\n1
这也解释了为什么,4\n\n1\n3
和之后有换行符6\n\n1\n3\n5
。如果您认为这有什么问题,请纠正我。谢谢你。