2014-11-06 125 views
1

我有这样正则表达式连续行吗?

name1 
age1 
name2 
age2 
name3 
age3 
name4 
age4 

我想在这个格式的数据

name1:age1 
name2:age2 
name3:age3 
name4:age4 

任何人都可以给我建议任何正则表达式来达到这样的效果的文本文件?我正在使用eclipse正则表达式,其工作方式与记事本++或编辑正则表达式相同。也可以通过sed在bash中完成linux吗?

+1

查找内容(这里是最短的解决方案之一):'(\ w +)\ N(\ W +)'。用'$ 1:$ 2'代替。 – 2014-11-06 07:20:24

+0

[我如何使用vim,sed或其他类似工具连接大型文件(100万行)中的连续行对?](http://stackoverflow.com/questions/8545538/how-do- i-join-pairs-of-a-line-in-large-file-1-million-lines-using) – Jotne 2014-11-06 07:53:19

回答

2

通过sed的,

$ sed 'N;s/\n/:/' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

N追加下一行到模式空间的缓冲区。

通过粘贴,

$ paste -d':' - - < file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 
+0

简单高效,也许最后一个'g'不需要完美 – NeronLeVelu 2014-11-06 07:29:21

0

既然已经提供了SED解决方案是最好的,analternative使用awk:

>awk 'NR%2==0{print x":"$0}{x=$0}' your_file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 
> 
0

这里是一个awk

awk '{printf "%s%s",$1,(NR%2==0?RS:":")}' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

它可以是这样写,但它可能不适用于所有系统:

awk '{printf $1(NR%2==0?RS:":")}' file 

这里是一个短awk

awk 'ORS=NR%2?":":RS' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

这是非常灵活的。如果你想加入每3rd行,只是改变NR%3 ...


这里是另一个past

paste -sd":\n" file 
name1:age1 
name2:age2 
name3:age3 
name4:age4