我有一个文件,其中有几个以十六进制编码的特殊字符(其他单词是可读的)。我想使用sed来转换它们使用xHH,但我不能使用regex来匹配十六进制值来翻译。
如果我手动强制HexaValue it works:
[user@Centos7]$ echo "aaaíaaa" | sed -r 's/&#x([[:xdigit:]]+);/xED/g'
aaaíaaa
但是如果我尝试重用正则表达式中的匹配翻译它使用 xHH ACSII价值,它失败=比;结果是x +匹配的值
[user@Centos7]$ echo "aaaíaaa" | sed -r 's/&#x([[:xdigit:]]+);/x1/g'
aaaxEDaaa
有什么线索可以帮助我解决这个问题吗?由于
您可以使用MHTML::Entities
实现perl
:
echo 'aaaíaaa' | perl -MHTML::Entities -CS -pe '$_ = decode_entities($_)'
查看在线演示
,
- 由于
-CS
Perl允许UTF-8字符在STDOUT decode_entities($string)
例程将在$string
中找到的HTML实体替换为相应的Unicode字符(未被识别的实体保留原样)。