如何使用sed命令将换行符(“\n”)替换为空格(“”)?

我尝试过:

sed 's#\n# #g' file
sed 's#^$# #g' file

如何修复?


当前回答

也可以使用标准文本编辑器:

printf '%s\n' '%s/$/ /' '%j' 'w' | ed -s file

注意:这会将结果保存回文件。

与这里的大多数sed答案一样,此解决方案的缺点是必须首先将整个文件加载到内存中。

其他回答

为什么我没有找到一个简单的awk解决方案?

awk '{printf $0}' file

printf将打印没有换行的每一行,如果您想用空格或其他分隔原始行:

awk '{printf $0 " "}' file

您可以使用xargs-默认情况下,它将用空格替换\n。

但是,如果您的输入有任何未终止的引号,例如给定行上的引号符号不匹配,则会出现问题。

cat file | xargs

为了完整起见

Perl版本以您预期的方式工作。

perl -i -p -e 's/\n//' file

正如评论中所指出的,值得注意的是,这些编辑是到位的-i.bak将在替换之前为您提供原始文件的备份,以防您的正则表达式没有您想象的那么聪明。

sed -i ':a;N;$!ba;s/\n/,/g' test.txt

tr "\n" <file name>