什么有效
这个sed脚本按预期工作:
$ echo -e "2\n1\n4\n3" | sed -n 'h; n; G; p'
1
2
3
4
它一次需要一对输入线,并交换线 . 到现在为止还挺好 .
什么行不通
我不明白的是为什么我可以_605623的自动打印 . 由于sed会在每个执行周期结束时自动打印模式空间(除非它被抑制),为什么这不等同?
$ echo -e "2\n1\n4\n3" | sed 'h; n; G'
2
1
2
4
3
4
我认为代码说的是:
-
输入行被复制到保留空间 .
-
下一行被读入模式空间 .
-
保留空间附加到模式空间 .
-
The pattern space (line1 + newline + line2) is printed automatically 因为我们已经到了执行周期的末尾 .
显然,我错了......但我不明白为什么 . 任何人都可以解释为什么第二个例子会破坏,为什么需要打印抑制来产生正确的结果?
2 回答
n
命令使sed在读取下一行之前打印当前缓冲区 . 这是http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html的描述这可能对你有用:
或者这个(GNU sed):
要找出将要打印的内容,请使用
l
或者如果您使用的是GNUl0