在 sed 中将 \n 替换为换行符

在 sed 中将 \n 替换为换行符

我对 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

如果Holdspace 为空,您还可以执行以下操作:

sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'

...但乌克斯努特的回答已经更快更简单了,所以你可以随心所欲。

另一个无关的可能性:

INPUT | sed -n l | while read v ; do printf "${v%?}" ; done

但要注意, ^that 翻译所有标准 C 风格的\反斜杠转义符 - 比如\backspace 、\return 、\00八进制以及诸如此类的东西。

答案4

虽然我喜欢 sed,但我认为最简单、最便携的解决方案是使用 echo:

echo -e "string with\n in it"

或者,如果您的文件中包含带有“\n”的字符串,请使用命令替换:

echo -e $(filename)

然后添加重定向以根据需要保存到文件。

相关内容