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
步骤,而只是复制到保留空间并删除