我正在学习 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
是。
我想我找到了答案。从位于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
。
如果您认为这有什么问题,请纠正我。谢谢你。
归档时间: |
|
查看次数: |
303 次 |
最近记录: |