【发布时间】:2018-09-23 20:55:52
【问题描述】:
我想通过隔离捕获组中的 HEX 值来直接使用 sed 打印 HEX 值转换。这有效:
echo bbb3Accc | sed -n 's/3A/\x3A/p'
bbb:ccc
...但这不起作用:
echo bbb3Accc | sed 's/\(3A\)/\x\1/'
bbbx3Accc
...或基于 URL 编码字符串的实际捕获组 REGEX 匹配:
echo bbb%3Accc | sed 's/%\([A-Za-z0-9]\)/\x\1/'
bbbx3Accc
如果 HEX 值是由 REGEX 捕获组以及 \x 转义符构成的,那么显然 sed 不再解释和转换 HEX 值。
但我想知道是否有一种我不知道的解决方法,仅使用 sed。请注意,我知道我可以执行 bash 命令替换并将 sed 语法包装在 echo -e 中,但我想避免这种情况。
【问题讨论】:
-
\x\1将导致\x和\1(因为\x期望后面有两个十六进制数字,但\appearing 将其切断)...\x没有特殊意思是,所以只打印x...我认为在 sed 中没有任何方法可以做到这一点...您可以使用 perl...不确定 awk,但可能有 match/substr 的方法 -
这与 (GNU) awk 的问题大致相同。这有效:
awk 'BEGIN {printf "%c\n",0x3A}'(正确打印:)但这惨败echo 0x3A | awk '{printf "%c\n",$1}' -
@linux_newbie 将非十进制字符串转换为您使用
strtonum()的awk 中的数字,例如:echo 0x3A | gawk '{printf "%c\n",strtonum($1)}'输出:。
标签: regex bash sed hex capture-group