我有许多 HTML 文件,其中包含混合 unicode 字符串(如 )\303\243
和可打印字符(如%s
.我想做的是以安全的方式将 unicode 字符串转换为可打印字符。
我发现 GNU coreutils 中的 printf 会自动转换它们,但我前段时间也经历过惨痛的教训,如果您不知道要打印什么,则 printf 不值得信赖:
$ env printf "$(cat filename.htm)"
printf: %20M: invalid conversion specification
我也知道 bash 可以进行这样的转换,但我必须使用正则表达式循环文件,这根本不安全:
$ echo $'\303\243'
ã
有没有这样的命令行工具可以以干净、安全的方式处理这些文件?
答案1
如果文件没有其他反斜杠:
$ printf %b\\n 'aa\303\243'
aaã
如果这样做,您可以使用双反斜杠,后面不跟整数:
$ printf %b\\n "$(sed -E 's/\\/\\\\/g;s/\\(\\[0-7])/\1/g' <<< '\\a\na\303\243')"
\\a\naã