Sed 不使用';d';是否也删除保持空间?

Sed 不使用';d';是否也删除保持空间?,sed,Sed,有人能解释一下为什么会这样吗 预计: $ echo -e "foo\nbar" | sed -n 'h; x; p' foo bar $ echo -e "foo\nbar" | sed -n 'h; s/.*//; g; p' foo bar 我把每一行放在保持空间,然后交换保持空间和图案空间,然后打印图案空间,所以每一行都被打印。现在,为什么下面的不同 $ echo -e "foo\nbar" | sed -n 'h; d; x; p' 我认为不会,因为我在交换之前删除了模式空间,所以

有人能解释一下为什么会这样吗

预计:

$ echo -e "foo\nbar" | sed -n 'h; x; p'
foo
bar
$ echo -e "foo\nbar" | sed -n 'h; s/.*//; g; p'
foo
bar
我把每一行放在保持空间,然后交换保持空间和图案空间,然后打印图案空间,所以每一行都被打印。现在,为什么下面的不同

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

我认为不会,因为我在交换之前删除了模式空间,所以存储的行应该放回模式空间。它是
x之后应该为空的保持空间,对吗?我删除模式空间,然后交换。我保存的行在哪里?

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

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

以下工作如预期:

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

很抱歉打扰你们。

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