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

我尝试过:

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

如何修复?


当前回答

较短的锥子替代品:

awk 1 ORS=' '

解释

awk程序由由条件代码块组成的规则组成,即:

condition { code-block }

如果省略了代码块,则使用默认值:{print$0}。因此,1被解释为真条件,并且每行执行打印$0。

当awk读取输入时,它会根据RS(记录分隔符)的值将其拆分为记录,默认情况下是一个换行符,因此awk默认情况下将按行解析输入。拆分还涉及从输入记录中剥离RS。

现在,当打印记录时,ORS(输出记录分隔符)被附加到记录上,默认值也是一个换行符。因此,通过将ORS更改为空格,所有换行符都将更改为空格。

其他回答

如果您不幸不得不处理Windows行结尾,则需要删除\r和\n:

tr '\r\n' ' ' < $input > $output

我特别喜欢的解决方案是在保留空间中追加所有文件,并替换文件末尾的所有换行符:

$ (echo foo; echo bar) | sed -n 'H;${x;s/\n//g;p;}'
foobar

然而,有人告诉我,在一些sed实现中,保持空间可能是有限的。

较短的锥子替代品:

awk 1 ORS=' '

解释

awk程序由由条件代码块组成的规则组成,即:

condition { code-block }

如果省略了代码块,则使用默认值:{print$0}。因此,1被解释为真条件,并且每行执行打印$0。

当awk读取输入时,它会根据RS(记录分隔符)的值将其拆分为记录,默认情况下是一个换行符,因此awk默认情况下将按行解析输入。拆分还涉及从输入记录中剥离RS。

现在,当打印记录时,ORS(输出记录分隔符)被附加到记录上,默认值也是一个换行符。因此,通过将ORS更改为空格,所有换行符都将更改为空格。

可以使用xargs:

seq 10 | xargs

or

seq 10 | xargs echo -n

我使用了一种混合方法,通过使用tr用制表符替换换行符,然后用我想要的任何内容替换制表符,来绕过换行符的问题。在本例中,“”,因为我试图生成HTML分隔符。

echo -e "a\nb\nc\n" |tr '\n' '\t' | sed 's/\t/ <br> /g'`