有人可以解释为什么会这样吗?
这是预期的:
$ echo -e "foo\nbar" | sed -n 'h; x; p'
foo
bar
我将每一行放入保留空间,然后交换保持空间和图案空间,然后打印图案空间,以便打印每一行。现在,为什么以下不同?
$ echo -e "foo\nbar" | sed -n 'h; d; x; p'
我认为不会这样,因为我在交换之前删除了模式空间,所以存储的行应该放回到模式空间中。在x;
之后,保留空间应为空,对吗?我删除了模式空间,然后交换。我保存的线路在哪里?
答案 0 :(得分:5)
使用d
时,清除模式空间,读取下一行,并从脚本开头开始处理。因此,您实际上从未实际进入x
和p
步骤,而只是复制到保留空间并删除。
答案 1 :(得分:3)
我想这与man sed
中的以下行有关:
d删除图案空间。开始下一个周期。
以下按预期方式工作:
$ echo -e "foo\nbar" | sed -n 'h; s/.*//; g; p'
foo
bar
很抱歉打扰你们。