我需要根据模式使用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
答案 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