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

我尝试过:

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

如何修复?


当前回答

在sed替换部分中,键入反斜杠,按回车键转到第二行,然后以/g'结尾:

sed 's/>/\
/g'

[root@localhost ~]# echo "1st</first>2nd</second>3rd</third>" | sed 's/>/\
> /g'
1st</first
2nd</second
3rd</third

[root@localhost ~]#

其他回答

cat file | xargs

为了完整起见

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

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

要删除空行,请执行以下操作:

sed -n "s/^$//;t;p;"

这可能适用于您(GNU sed):

sed 'H;$!d;x;:a;s/^((.).*)\2/\1 /;ta;s/.//' file

H命令在模式空间前面加一个换行符,然后将结果附加到保留空间。sed的正常流程是从每一行中删除以下换行符,因此这将在保留空间的开头引入一个换行符,并复制文件的其余部分。一旦文件被拖入保留空间,就用模式空间替换保留空间,然后使用模式匹配将所有原始换行替换为空格。最后,删除引入的换行符。

这样做的优点是,在sed命令中永远不会实际输入换行字符串。

备选方案:

sed 'H;$!d;x;y/\n/ /;s/.//' file

Or:

sed 'H;1h;$!d;x;y/\n/ /' file

针对上述“tr”解决方案,在Windows上(可能使用Gnuwin32版本的tr),建议的解决方案:

tr '\n' ' ' < input

对我不起作用,它可能会出错,或者出于某种原因实际上替换了\n w/“”。

使用tr的另一个功能,“delete”选项-d确实有效:

tr -d '\n' < input

或“\r\n”而不是“\n”