4

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

这是预期的:

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

我把每一行放在保持空间中,然后交换保持空间和模式空间,然后打印模式空间,这样每一行都被打印了。现在,为什么以下不同?

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

我认为不会,因为我在交换之前删除了模式空间,所以无论如何都应该将存储的行放回模式空间。之后应该是空的容纳空间x;,对吗?我删除模式空间,然后交换。我保存的线路在哪里?

4

2 回答 2

5

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

于 2012-05-16T08:25:52.633 回答
4

我猜它与以下行有关man sed

d 删除模式空间。开始下一个循环。

以下按预期工作:

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

很抱歉打扰各位了。

于 2012-05-16T08:25:27.650 回答