如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
当前回答
以前的大多数sed命令示例在我的Unix系统中都不适用,并给出错误消息:
Label too long: {:q;N;s/\n/ /g;t q}
这适用于所有Unix/Linux环境:
line=$(while read line; do echo -n "$line "; done < yoursourcefile.txt)
echo $line |sed 's/ //g' > sortedoutput.txt
第一行将从文件yoursourcefile.txt中删除所有新行,并生成一行。第二个sed命令将删除其中的所有空格。
其他回答
这可能适用于您(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
GNUsed有一个选项-z,用于空分隔记录(行)。您可以拨打:
sed -z 's/\n/ /g'
您可以使用xargs-默认情况下,它将用空格替换\n。
但是,如果您的输入有任何未终止的引号,例如给定行上的引号符号不匹配,则会出现问题。
要删除空行,请执行以下操作:
sed -n "s/^$//;t;p;"
sed '1h;1!H;$!d
x;s/\n/ /g' YourFile
这不适用于巨大的文件(缓冲区限制),但如果有足够的内存来保存文件,则非常有效。(更正H->1h;在@hilojack的好话之后1!H)
另一个在读取时更改新行的版本(更多的cpu,更少的内存)
sed ':loop
$! N
s/\n/ /
t loop' YourFile