在 shell 中将 \n 替换为 \\n

在 shell 中将 \n 替换为 \\n

我正在寻找如何转换这样的字符串:

foo\nbar

进入 :

foo\\nbar

到目前为止我所看到的是tr不能这样做,因为它只适用于字符,而且我找不到任何其他有效的解决方案......

示例:

redgl0w@anarchy ~> cat test
foo
bar

我希望得到:

redgl0w@anarchy ~> echo test
foo\nbar

答案1

使用bash:

$ cat test
foo
bar
baz

$ content=$(<test)

$ joined=${content//$'\n'/\\n}

$ echo "$joined"
foo\nbar\nbaz

答案2

您可以在 perl 中轻松完成此操作:

perl -pe 's/\n/\\n/' file

如果您的字符串位于变量中,请使用:

perl -pe 's/\n/\\n/' <<<"$variable"

或者

printf '%s' "$variable" | perl -pe 's/\n/\\n/' 

如果需要,可以将其保存为变量:

$ cat test
foo
bar
$ test=$(perl -pe 's/\n/\\n/g' test)
$ echo "$test"
foo\nbar\n

或者,如果您不想转换最后的尾随换行符,并且假设您的文件足够小以适合 RAM,您可以执行以下操作:

$ test=$(perl -0777 -pe 's/\n/\\n/g; s/\\n$/\n/' test); 
$ echo "$test"
foo\nbar

或者,建议的更好方法拉克什·夏尔马在不需要将文件保存在内存中的注释中:

$ perl -lpe '$\ = eof ? qq(\n) : q(\n);s/\n/\\n/;' test
foo\nbar

相关内容