Bash 将字符\n替换为文本上的实际换行符

Bash 将字符\n替换为文本上的实际换行符,bash,unix,sed,Bash,Unix,Sed,所以,我有一个文本文件,看起来像: this text \n and more text. 我试图用真正的换行符替换字符,\n为此,我尝试了如下操作: sed 's/\n/\n/g' inputfile 关于如何使用sed来实现这一点,有什么想法吗?谢谢。您必须在搜索模式中避开反斜杠 sed 's/\\n/\n/g' inputfile 使用awk: awk '{gsub(/\\n/, "\n")} 1' file 请注意,awk解决方案与POSIX awk以及gnu awk一起工作 以

所以,我有一个文本文件,看起来像:

this text \n and more text.
我试图用真正的换行符替换字符,\n为此,我尝试了如下操作:

sed 's/\n/\n/g' inputfile

关于如何使用sed来实现这一点,有什么想法吗?谢谢。

您必须在搜索模式中避开反斜杠

sed 's/\\n/\n/g' inputfile

使用
awk

awk '{gsub(/\\n/, "\n")} 1' file
请注意,awk解决方案与POSIX awk以及gnu awk一起工作

以下是POSIX sed解决方案:

sed 's/\\n/\
/g' file

Bodo的答案适用于Linux(使用GNU
sed
)。但是在使用BSD
sed
的系统上,例如MacOS,替换字符串中的
\n
不会替换为换行符,因此需要在替换字符串中添加文字换行符。它需要转义,否则会出现错误“替换模式内的未转义换行符”


$“…”
告诉
bash
替换字符串中的C样式转义序列。因此,您需要将所有反斜杠加倍,才能将它们逐字放入字符串中。

在这里,您发现此
sed
可以工作,但需要
bash
并且可能无法处理类似
dash
的内容。我建议使用与POSIX兼容的
sed
命令,该命令将在OSX bash、dash、ksh和zsh上运行
sed $'s/\\\\n/\\\n/g'