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

Sed实用程序的模式空间和保持空间的初始化值是null还是空字符串?,sed,Sed,从sed的文档中: sed维护两个数据缓冲区:活动模式空间和 辅助等待空间。两者最初都是空的 我最初认为模式空间和保持空间的值为null(nothing)。但是从下面的示例来看,它们的初始值似乎是一个换行符(\n) 我的理解正确吗? 谢谢。我认为答案是,p命令与默认的打印操作一样,实际上是在空白图案空间的末尾添加一个换行符。这是基于GNUsed文档(顺便说一下,就在您引用的那一位下面): sed通过对每一行输入执行以下循环进行操作:首先,sed从输入流中读取一行,删除任何尾随换行符,并将其放置在

从sed的文档中:

sed维护两个数据缓冲区:活动模式空间和 辅助等待空间。两者最初都是空的

我最初认为模式空间和保持空间的值为null(nothing)。但是从下面的示例来看,它们的初始值似乎是一个换行符(\n)

我的理解正确吗?
谢谢。

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

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

。。。废话,废话

当到达脚本末尾时,除非使用了
-n
选项,否则模式空间的内容将打印到输出流中,如果删除了尾随换行符,则将其添加回

换句话说,在模式(和保持)空间中保持的行没有尾随的换行符,
aa
行被保持为
aa
,而不是
aa


当然,保持空间可能仍然包含多行,但这仅仅意味着在文件的前两行执行
H
命令将为您提供一个包含
aabb
,而不是
aabb

的保持空间。在GNU-sed中,如果鲜为人知,一个非常有用的命令是
l
。特别适用于计算HS和PS中包含多行时的情况。
[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 ~]#