Sed实用程序的模式空间和保持空间的初始值为null或空字符串?

时间:2011-11-21 14:16:58

标签: sed

来自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 ~]#

我的理解是对的吗? 感谢。

1 个答案:

答案 0 :(得分:3)

我认为答案是p命令与默认的打印操作一样,实际上是在空模式空间的末尾添加换行符。这是基于GNU sed文档中的this little snippet(顺便提一下,就在你引用的那一位下面):

  

sed通过在每行输入上执行以下循环来操作:首先,sed从输入流中读取一行,删除任何尾随换行符,并将其放置在模式空间中。

     

......等等,等等......等等      

当到达脚本结尾时,除非正在使用-n选项,否则模式空间的内容将打印到输出流,如果删除则添加回尾线。

换句话说,在模式(和保留)空间中保留的行没有尾随换行符 - aa行保持为aa而不是aa<newline>。< / p>

当然,保留空间可能仍然包含多行,但这只意味着在文件的前两行执行H命令将为您提供包含aa<newline>bb的保留空间,而不是{ {1}}。