有人可以解释为什么会发生这种情况吗?
这是预期的:
$ echo -e "foonbar" | sed -n 'h; x; p'
foo
bar
我把每一行都放在保持空间中,然后交换保持空间和图案空间,然后打印图案空间,所以每一行都被打印出来。现在,为什么以下不同?
$ echo -e "foonbar" | sed -n 'h; d; x; p'
我认为不会,因为我在交换之前删除了模式空间,因此无论如何都应该将存储的行放回模式空间。这是x;
后应该为空的保留空间,对吧?我删除了模式空间,然后交换。我保存的线路去哪儿了?
使用 d
时,将清除模式空间,读取下一行,并从脚本的开头重新开始处理。因此,您实际上永远不会到达x
和p
步骤,而只是复制到保留空间并删除。
我想它与man sed
中的以下行有关:
d 删除模式空间。 开始下一个周期。
以下工作按预期工作:
$ echo -e "foonbar" | sed -n 'h; s/.*//; g; p'
foo
bar
很抱歉打扰你们。