2014-11-06 52 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