我对 GNU sed
、 POSIXsed
和 BSDsed
的无数选项感到非常困惑。如何使用这三种类型将文字替换\n
为换行符?sed
答案1
sed 's/\\n/\
/g'
请注意替换字符串中按回车键之前的反斜杠。
答案2
既然您已经有了可移植的sed
答案,我只想提一下,sed
如果您需要以某种方式操纵换行符,那么这很少是最好的工具。 Perl 几乎与 一样可移植sed
,默认安装在大多数 *nix 系统上,并且可以非常轻松地处理这个问题:
printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'
另一个非常便携的选择是awk
:
printf '%s\n' 'aa\nbb' | awk '{gsub("\\\\n","\n")};1'
在 Solaris 上,请记住使用 /usr/xpg4/bin 中的标准 awk,/bin 中的 awk 是历史版本,不应用于新脚本。
答案3
如果H
oldspace 为空,您还可以执行以下操作:
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
...但乌克斯努特的回答已经更快更简单了,所以你可以随心所欲。
另一个无关的可能性:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
但要注意, ^that 翻译所有标准 C 风格的\
反斜杠转义符 - 比如\b
ackspace 、\r
eturn 、\00
八进制以及诸如此类的东西。
答案4
虽然我喜欢 sed,但我认为最简单、最便携的解决方案是使用 echo:
echo -e "string with\n in it"
或者,如果您的文件中包含带有“\n”的字符串,请使用命令替换:
echo -e $(filename)
然后添加重定向以根据需要保存到文件。