-1

谁能帮我在 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
4

3 回答 3

3

sed解决方案:

sed -n '/^End\s/{h;n;p;g};p' inputfile
于 2012-09-14T10:34:26.520 回答
2

简单的 Perl 解决方案。$n代表“现在”,$b代表“之前”,即“上一行是End”。

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'
于 2012-09-14T10:33:13.087 回答
0
 sed -n '/^End/{h;n;G};p' inputfile

这会做 +

于 2013-04-18T11:18:18.973 回答