如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
如何使用sed命令将换行符(“\n”)替换为空格(“”)?
我尝试过:
sed 's#\n# #g' file
sed 's#^$# #g' file
如何修复?
当前回答
sed旨在用于基于行的输入。尽管它可以满足你的需要。
这里更好的选择是使用tr命令,如下所示:
tr '\n' ' ' < input_filename
或完全删除换行符:
tr -d '\n' < input.txt > output.txt
或者如果您有GNU版本(带有长选项)
tr --delete '\n' < input.txt > output.txt
其他回答
用任何字符串替换换行符,并替换最后一个换行符
纯tr解决方案只能替换为单个字符,纯sed解决方案不能替换输入的最后一行。以下解决方案解决了这些问题,并且似乎对二进制数据是安全的(即使使用UTF-8语言环境):
printf '1\n2\n3\n' |
sed 's/%/%p/g;s/@/%a/g' | tr '\n' @ | sed 's/@/<br>/g;s/%a/@/g;s/%p/%/g'
结果:
1<br>2<br>3<br>
使用Awk:
awk "BEGIN { o=\"\" } { o=o \" \" \$0 } END { print o; }"
如果您不幸不得不处理Windows行结尾,则需要删除\r和\n:
tr '\r\n' ' ' < $input > $output
我特别喜欢的解决方案是在保留空间中追加所有文件,并替换文件末尾的所有换行符:
$ (echo foo; echo bar) | sed -n 'H;${x;s/\n//g;p;}'
foobar
然而,有人告诉我,在一些sed实现中,保持空间可能是有限的。
要删除空行,请执行以下操作:
sed -n "s/^$//;t;p;"