我有一个文件,文件中有几个用十六进制编码的特殊字符(其他单词是可读的)。我想使用sed来使用\xHH来转换它们,但是我无法使用regex来匹配转换的十六进制值。
如果我手动强制使用Hexa值,它可以工作:
[user@Centos7]$ echo "aaaíaaa" | sed -r 's/&#x([[:xdigit:]]+);/\xED/g'
aaaíaaa但是,如果我尝试使用重用来自regex的匹配以使用\xHH将其转换为ACSII值,则=>失败,结果是匹配的值。
[user@Centos7]$ echo "aaaíaaa" | sed -r 's/&#x([[:xdigit:]]+);/\x\1/g'
aaaxEDaaa有什么线索能帮到我吗?谢谢
发布于 2021-10-11 17:27:46
您可以使用perl使用MHTML::Entities来实现这一点。
echo 'aaaíaaa' | perl -MHTML::Entities -CS -pe '$_ = decode_entities($_)'见在线演示。
这里,
-CS,Perl允许STDOUT中的UTF-8字符。decode_entities($string)例程将$string中的HTML替换为相应的Unicode字符(n可识别的实体保持原样)。https://stackoverflow.com/questions/69528436
复制相似问题