如何使用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
其他回答
易于理解的解决方案
我有这个问题。最重要的是,我需要在BSD(Mac OS X)和GNU(Linux和Cygwin)sed和tr上工作的解决方案:
$ echo 'foo
bar
baz
foo2
bar2
baz2' \
| tr '\n' '\000' \
| sed 's:\x00\x00.*:\n:g' \
| tr '\000' '\n'
输出:
foo
bar
baz
(后面有换行符)
它可以在Linux、OS X和BSD上运行,即使没有UTF-8支持或使用蹩脚的终端。
使用tr将换行符与另一个字符交换。NULL(\000或\x00)很好,因为它不需要UTF-8支持,也不太可能被使用。使用sed匹配NULL如果需要,使用tr交换回额外的换行符
试试看:
echo "a,b"|sed 's/,/\r\n/'
GNUsed有一个选项-z,用于空分隔记录(行)。您可以拨打:
sed -z 's/\n/ /g'
tr '\n' ' '
是命令。
简单易用。
这可能适用于您(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