此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
我认为代码所说的是:
显然,我错了......但我不明白为什么。任何人都可以解释为什么第二个例子会破坏,为什么需要打印抑制来产生正确的结果?
答案 0 :(得分:2)
n
命令使sed在读取下一行之前打印当前缓冲区。以下是http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
[2addr]n
Write the pattern space to standard output if the default
output has not been suppressed, and replace the pattern
space with the next line of input, less its terminating <newline>.
答案 1 :(得分:0)
这可能对您有用:
echo -e "2\n1\n4\n3" | sed 'h;N;s/.*\n//;G'
1
2
3
4
或者这个(GNU sed):
echo -e "2\n1\n4\n3" | sed '1~2{h;d};2~2G'
1
2
3
4
要了解要打印的内容,请使用l
或使用GNU l0