如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
当前回答
如果您不幸不得不处理Windows行结尾,则需要删除\r和\n:
tr '\r\n' ' ' < $input > $output
其他回答
cat file | xargs
为了完整起见
我特别喜欢的解决方案是在保留空间中追加所有文件,并替换文件末尾的所有换行符:
$ (echo foo; echo bar) | sed -n 'H;${x;s/\n//g;p;}'
foobar
然而,有人告诉我,在一些sed实现中,保持空间可能是有限的。
另一种GNU sed方法,几乎与Zsolt Botykai的答案相同,但这使用了sed不太常用的y(音译)命令,这节省了一个字节的代码(后面的g):
sed ':a;N;$!ba;y/\n/ /'
人们可能希望y的运行速度比s快(也许以tr的速度,快20倍),但在GNU sed v4.2.2中,y比s慢4%左右。
更便携的BSD sed版本:
sed -e ':a' -e 'N;$!ba' -e 'y/\n/ /'
也可以使用标准文本编辑器:
printf '%s\n' '%s/$/ /' '%j' 'w' | ed -s file
注意:这会将结果保存回文件。
与这里的大多数sed答案一样,此解决方案的缺点是必须首先将整个文件加载到内存中。
这真的很简单。。。当我找到解决办法时,我真的很生气。又少了一个反斜杠。这就是:
sed -i "s/\\\\\n//g" filename