如何使用sed和正则表达式将十六进制字符转换为ASCII



我有一个文件,其中有几个以十六进制编码的特殊字符(其他单词是可读的)。我想使用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($_)'

查看在线演示

,

  • 由于-CSPerl允许UTF-8字符在STDOUT
  • decode_entities($string)例程将在$string中找到的HTML实体替换为相应的Unicode字符(未被识别的实体保留原样)。

相关内容

  • 没有找到相关文章

最新更新