什么有效
此 sed 脚本按预期工作:
$ echo -e "2\n1\n4\n3" | sed -n 'h; n; G; p'
1
2
3
4
它一次需要一对输入线,并交换线。到现在为止还挺好。
什么不起作用
我不明白的是为什么我不能使用 sed 的自动打印。由于 sed 在每个执行周期结束时自动打印模式空间(除非它被抑制),为什么这不等效?
$ echo -e "2\n1\n4\n3" | sed 'h; n; G'
2
1
2
4
3
4
我认为代码说的是:
- 输入行被复制到保持空间。
- 下一行被读入模式空间。
- 保持空间附加到模式空间。
- 模式空间 (line1 + newline + line2) 会自动打印,因为我们已经到了执行周期的末尾。
显然,我错了……但我不明白为什么。谁能解释为什么第二个示例会中断,以及为什么需要打印抑制才能产生正确的结果?