来自sed:
的文档sed维护两个数据缓冲区:活动模式空间和 辅助保持空间。两者最初都是空的。
我最初认为模式空间和保持空间的值为空(无)。但是从下面的例子中,它们的初始值似乎是一个换行符(\ n)。
[root@localhost ~]# cat e.txt
aa
bb
cc
dd
[root@localhost ~]# cat e.txt | sed -r '/c/{x;p;x}'
aa
bb
cc
dd
[root@localhost ~]#
我的理解是对的吗? 感谢。
答案 0 :(得分:3)
我认为答案是p
命令与默认的打印操作一样,实际上是在空模式空间的末尾添加换行符。这是基于GNU sed
文档中的this little snippet(顺便提一下,就在你引用的那一位下面):
sed
通过在每行输入上执行以下循环来操作:首先,sed
从输入流中读取一行,删除任何尾随换行符,并将其放置在模式空间中。......等等,等等......等等
当到达脚本结尾时,除非正在使用
-n
选项,否则模式空间的内容将打印到输出流,如果删除则添加回尾线。
换句话说,在模式(和保留)空间中保留的行没有尾随换行符 - aa
行保持为aa
而不是aa<newline>
。< / p>
当然,保留空间可能仍然包含多行,但这只意味着在文件的前两行执行H
命令将为您提供包含aa<newline>bb
的保留空间,而不是{ {1}}。