sed:多行的条件合并

时间:2012-07-02 09:00:39

标签: merge sed lines

我需要根据模式使用sed合并文件的行。例如:

输入文件:

X1 A B C D E F

\+ G H I J 1 

\+ LK T PP E OO 2

X2 DDF F Y 

\+ J W Q 

...

OutPut预计:

X1 A B C D E F G H I J 1 LK T PP E OO 2

X2 DDF F Y J W Q 

..

我希望在vi编辑器中可以使用相同的值(:%s / \ n + / / g)

在网上搜索我发现了一个逻辑上应该有效的解决方案

  

sed -e'{:a; N; s / \ n + / / g; ta}'infile

但是这个命令违背了我的理解和逻辑,并产生了输出

X1 A B C D E F

\+ G H I J 1 LK T PP E OO 2
X2 DDF F Y 

\+ J W Q 

...

欢迎任何想法,&提前致谢

Srisurya

3 个答案:

答案 0 :(得分:18)

这可能对您有用:

sed ':a;$!N;s/\n+//;ta;P;D' file

说明:

  • :a是一个循环占位符
  • $!N表示如果不是文件结尾追加到当前行的下一行。
  • s/\n+//表示删除在线结尾,后跟加号
  • ta表示最后一次替换是否分支到a循环占位符
  • P打印到第一个换行符。
  • D删除并包含第一个换行符。

答案 1 :(得分:2)

替代awk oneliner:

awk 'BEGIN{RS="  "}{gsub(/\n\n\+/,"")}1' yourFile

答案 2 :(得分:0)

potong的回答对我不起作用,但类似的东西也起作用:

sed -e :a -e '$!N;s/\n+//;ta' -e 'P;D' file

这里有好的sed文档: http://sed.sourceforge.net/sedfaq3.html