2012-08-07 86 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