如何使用 sed 和正则表达式将十六进制字符转换为 ASCII
How to convert Hex characters to ASCII using sed & regex
我有一个文件,其中有几个用十六进制编码的特殊字符(其他单词是可读的)。
我想使用 sed 使用 \xHH 来转换它们,但我无法使用正则表达式来匹配要翻译的六进制值。
如果我手动强制使用 Hexa 值,它会起作用:
[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:]]+);/\x/g'
aaaxEDaaa
有什么线索可以帮助我解决这个问题吗?
谢谢
您可以通过 perl
使用 MHTML::Entities
:
实现
echo 'aaaíaaa' | perl -MHTML::Entities -CS -pe '$_ = decode_entities($_)'
参见online demo。
这里,
- 由于
-CS
Perl 允许在 STDOUT 中使用 UTF-8 字符
decode_entities($string)
例程用相应的 Unicode 字符替换 HTML 在 $string
中找到的实体(n 个可识别的实体保持原样)。
我有一个文件,其中有几个用十六进制编码的特殊字符(其他单词是可读的)。 我想使用 sed 使用 \xHH 来转换它们,但我无法使用正则表达式来匹配要翻译的六进制值。
如果我手动强制使用 Hexa 值,它会起作用:
[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:]]+);/\x/g'
aaaxEDaaa
有什么线索可以帮助我解决这个问题吗? 谢谢
您可以通过 perl
使用 MHTML::Entities
:
echo 'aaaíaaa' | perl -MHTML::Entities -CS -pe '$_ = decode_entities($_)'
参见online demo。
这里,
- 由于
-CS
Perl 允许在 STDOUT 中使用 UTF-8 字符 decode_entities($string)
例程用相应的 Unicode 字符替换 HTML 在$string
中找到的实体(n 个可识别的实体保持原样)。