使用'd'擦除删除 sed 模式空间是否也会保留空间?



有人可以解释为什么会发生这种情况吗?

这是预期的:

$ echo -e "foonbar" | sed -n 'h; x; p'
foo
bar
我把每一行都放在保持空间中,然后交换保持空间和图案空间,

然后打印图案空间,所以每一行都被打印出来。现在,为什么以下不同?

$ echo -e "foonbar" | sed -n 'h; d; x; p'

我认为不会,因为我在交换之前删除了模式空间,因此无论如何都应该将存储的行放回模式空间。这是x;后应该为空的保留空间,对吧?我删除了模式空间,然后交换。我保存的线路去哪儿了?

使用 d 时,将清除模式空间,读取下一行,并从脚本的开头重新开始处理。因此,您实际上永远不会到达xp步骤,而只是复制到保留空间并删除。

我想它与man sed中的以下行有关:

d 删除模式空间。 开始下一个周期。

以下工作按预期工作:

$ echo -e "foonbar" | sed -n 'h; s/.*//; g; p'
foo
bar

很抱歉打扰你们。

最新更新