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