任何人都可以帮助我在sed / awk / perl
中对其进行排序输入文件
Start variable 1
End variable 2
A
Z
Next
Start variable b
End variable a
X
Y
Next
...
...
...
Start variable m
End variable n
M
N
Next
如果找到匹配End
的模式,请与其连续行交换
输出文件:
Start variable 1
A
End variable 2
Z
Next
Start variable b
X
End variable a
Y
Next
...
...
...
Start variable m
M
End variable n
N
Next
答案 0 :(得分:3)
sed
解决方案:
sed -n '/^End\s/{h;n;p;g};p' inputfile
答案 1 :(得分:2)
Simple Perl解决方案。 $n
代表“现在”,$b
代表“之前”,即“前一行是结束”。
perl -ne 'print unless $n = /^End$/; print "End\n" if $b; $b = $n'
对于问题的更新版本,只需添加$l
即可记住要打印的行:
perl -ne 'print unless $n = /^End /; $l = $_ if $n ; print $l if $b; $b = $n'
或者,等同但更短:
perl -ne '$n = /^End / and $l = $_ or print; $b and print $l; $b = $n'
答案 2 :(得分:0)
sed -n '/^End/{h;n;G};p' inputfile
这会做+