用'd'删除sed模式空间是否也可以保留空间?

时间:2012-05-16 08:21:14

标签: sed

有人可以解释为什么会这样吗?

这是预期的:

$ echo -e "foo\nbar" | sed -n 'h; x; p'
foo
bar

我将每一行放入保留空间,然后交换保持空间和图案空间,然后打印图案空间,以便打印每一行。现在,为什么以下不同?

$ echo -e "foo\nbar" | sed -n 'h; d; x; p'

我认为不会这样,因为我在交换之前删除了模式空间,所以存储的行应该放回到模式空间中。在x;之后,保留空间应为空,对吗?我删除了模式空间,然后交换。我保存的线路在哪里?

2 个答案:

答案 0 :(得分:5)

使用d时,清除模式空间,读取下一行,并从脚本开头开始处理。因此,您实际上从未实际进入xp步骤,而只是复制到保留空间并删除。

答案 1 :(得分:3)

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

  

d删除图案空间。开始下一个周期。

以下按预期方式工作:

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

很抱歉打扰你们。