当sed逐行读取文件时,当前已读取的行将插入到 模式 缓冲区(模式空间)中。模式缓冲区类似于临时缓冲区,即存储当前信息的暂存器。当您告诉sed打印时,它将打印图案缓冲区。
保持缓冲区/保持空间就像是一个长期存储,因此您可以捕获某些东西,将其存储起来,然后在sed处理另一行时再使用它。您不直接处理保留空间,相反,如果您想对其进行处理,则需要将其复制或追加到模式空间。例如,print命令p
仅打印图案空间。同样,s
在模式空间上操作。
这是一个例子:
sed -n '1!G;h;$p'
这里有三个命令:1!G
,h
和$p
。1!G
有一个地址,1
(第一行),但!
该命令将被执行到处手段 ,但 在第一行上。$p
另一方面,只会在最后一行执行。那么会发生什么:
最后,在读取最后一行并将保持空间(以相反的顺序包含所有先前的行)添加到图案空间之后,用来打印图案空间p
。您已经猜到了,上面的tac
命令完全可以执行该命令- 反向打印文件。