在文本文件中对具有特定模式的行重新排序

时间:2013-06-23 21:42:33

标签: regex perl sed awk pattern-matching

我有一个类似的文件:

{{}} line 1
{{}} line 2
line 3
line 4
{{}} line 5
line 6

我想要做的是将前缀为{{}}的文件的最后一行移到{{}}的倒数第二行之后,最终结果为:

{{}} line 1
{{}} line 2
{{}} line 5
line 3
line 4
line 6

必须是bash(调用sedperlhead或其他命令,这很好。

3 个答案:

答案 0 :(得分:3)

如果行以{{}}开头,则将其打印出来以保存以供日后使用,

perl -ne 'if (/^\Q{{}}/) {print}else{push @r,$_} }{print @r' file

答案 1 :(得分:3)

awk的一种方式:

awk '$1!="{{}}"{move[++i]=$0;next}1 END{for(x=1;x<=length(move);x++)print move[x]}' file

答案 2 :(得分:2)

GNU代码

sed -n 's/^\({{}}\)/\1/p;tk;H;:k;${x;s/\n//;p};d' file

$cat file
{{}} line 1
{{}} line 2
line 3
line 4
{{}} line 5
line 6

$sed -n 's/^\({{}}\)/\1/p;tk;H;:k;${x;s/\n//;p};d' file
{{}} line 1
{{}} line 2
{{}} line 5
line 3
line 4
line 6