You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因

sed的\xHH转义序列属于命令预解析阶段处理的语法,而正则捕获组的内容(\1)是在替换执行阶段才会填充的动态值。你写的\x\1在sed解析命令时,\x后没有可识别的十六进制字符,会被直接解析为普通字符x,后续再拼接捕获到的十六进制串,就会输出你看到的xED结果。

解决方案

方案1:使用Perl实现(推荐,兼容性更好)

Perl的替换支持e修饰符,可以将替换部分作为表达式执行,直接完成十六进制到ASCII的转换:

echo "aaaíaaa" | perl -pe 's/&#x([[:xdigit:]]+);/chr(hex($1))/ge'

执行后输出结果:

aaaíaaa

参数说明:

  • hex($1):将捕获到的十六进制串转为十进制数值
  • chr():将十进制数值转为对应的ASCII/Unicode字符
  • g:全局替换所有匹配项
  • e:将替换内容作为代码执行

方案2:使用GNU sed的e修饰符

如果你必须用sed,可以借助GNU sed专属的e修饰符,将替换结果作为shell命令执行,调用printf完成转义:

echo "aaaíaaa" | sed -r 's/&#x([[:xdigit:]]+);/printf "\x\1"/ge'

执行后输出结果和方案1一致。
注意:该方案仅支持GNU sed(CentOS 7默认的sed为GNU版本),不兼容BSD sed(macOS默认版本)。


内容的提问来源于stack exchange,提问作者Faabbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:15:02