2012-08-07 85 views
1

我有一個文件,如下所示:基於匹配模式在Unix文件合併多行

Country: USA 
Currency: Dollars 
Country: Canada 
Currency: Canadian 
      Dollars 
Country: Australia 
Currency: Australian 
      Dollars 
Country: France 
Currency: Euro 

我有兩行合併,並得到輸出如下:

Country: USA 
Currency: Dollars 
Country: Canada 
Currency: Canadian Dollars 
Country: Australia 
Currency: Australian Dollars 
Country: France 
Currency: Euro 

我嘗試使用tr並用空格替換換行符,但它不起作用。有人可以幫助這個。

謝謝。

回答

1
sed ':r;$!{N;br};s/\n[[:space:]]*\([[:alpha:]]\+\n\)/ \1/g' filename 

例子:

$ echo 'Country: USA 
> Currency: Dollars 
> Country: Canada 
> Currency: Canadian 
>   Dollars 
> Country: Australia 
> Currency: Australian 
>   Dollars 
> Country: France 
> Currency: Euro' | sed ':r;$!{N;br};s/\n[[:space:]]*\([[:alpha:]]\+\n\)/ \1/g' 
Country: USA 
Currency: Dollars 
Country: Canada 
Currency: Canadian Dollars 
Country: Australia 
Currency: Australian Dollars 
Country: France 
Currency: Euro 

說明:r;$!{N;br};讀取所有文件到模式空間,那麼像一些空間的所有行遵循一些字母搜索和前面的新行和多餘的空格都被刪除。有關更多信息,請參閱此sed reference

+0

我收到一個錯誤'Label too long::r; $!{N; br}; s/\ n [[:space:]] * \([[:alpha:]] \ + \ n \ )/ \ 1/g' – visakh 2012-08-07 09:44:59

+0

我在Solaris – visakh 2012-08-07 09:45:15

+0

@ user295338嗯,試試像這樣拆分命令:'sed -e':r'-e'$!{N; br}'-e's/\ n [[:space:]] * \([[:alpha:]] \ + \ n \)/ \ 1/g'filename' – 2012-08-07 09:48:23