gpt4 book ai didi

linux - 如何在 bash 中反转转义反斜杠编码,如 "\"和 "\303\266"?

转载 作者:IT王子 更新时间:2023-10-29 00:59:30 29 4
gpt4 key购买 nike

我有一个脚本可以记录具有 UTF8 编码名称的文件。然而,脚本的编码/环境设置不正确,它只是重新编码了原始字节。我现在在文件中有很多这样的行:

.../My\ Folders/My\ r\303\266m/...

所以文件名中有空格,带有 \ 和 UTF8 编码的东西,比如 \303\266(即 ö)。我想反转这个编码?是否有一些简单的 bash 命令行命令我可以链接在一起以删除它们?

我可以获得数百万个 sed 命令,但是要列出我们拥有的所有非 ASCII 字符需要很长时间。或者开始用 python 解析它。但我希望我能有一些技巧。

最佳答案

这是对 Unicode 字符的粗略分析:

text="/My\ Folders/My\ r\303\266m/"
text="echo \$\'"$(echo "$text"|sed -e 's|\\|\\\\|g')"\'"
# the argument to the echo must not be quoted or escaped-quoted in the next step
text=$(eval "echo $(eval "$text")")
read text < <(echo "$text")
echo "$text"

这利用了 Bash 的 $'string' 引用功能。

这会输出“/My Folders/My röm/”。

从 Bash 4.4 开始,它就像:

text="/My Folders/My r\303\266m/"
echo "${text@E}"

这使用了 Bash 的新特性 parameter transformation . E 运算符使参数被视为其内容在 $'string' 中,其中计算反斜杠转义序列(在本例中为八进制值)。

关于linux - 如何在 bash 中反转转义反斜杠编码,如 "\"和 "\303\266"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1390051/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com