我正在寻找如何转换这样的字符串:
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