我需要根据模式使用 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
....
预期产出:
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 编辑器中可以实现与 wat 相当的功能 (:%s/ +/ /g)
在网上搜索我找到了一个解决方案,从逻辑上讲应该可行
sed -e '{:a; N; s/ +/ /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
....
这可能对你有用:
sed ':a;$!N;s/\n+//;ta;P;D' file
说明:
:a
是循环占位符$!N
表示如果不是文件结尾,则将下一行追加到当前行。s/\n+//
表示删除行尾后跟一个加号ta
表示如果最后一个替换有效则分支到 a
循环占位符P
打印到第一个换行符。D
删除第一个换行符(包括第一个换行符)。替代 awk oneliner:
awk 'BEGIN{RS=" "}{gsub(/\n\n\+/,"")}1' yourFile
potong的答案对我不起作用,但类似的东西有效:
sed -e :a -e '$!N;s/\n+//;ta' -e 'P;D' file
这里有很好的 sed 文档: http://sed.sourceforge.net/sedfaq3.html