使用 awk printf 对文本进行 urldecode
我正在使用 awk 对一些文本进行 urldecode。
如果我将字符串编码到 printf
语句中,例如 printf "%s", "\x3D"
,它会正确输出 =
。如果我将整个转义字符串作为变量,则效果相同。
但是,如果我只有 3D
,如何附加 \x
以便 printf
将打印 =
而不是 \x3D
?
我正在使用 busybox awk 1.4.2
和 ash
shell。
I'm using awk
to urldecode some text.
If I code the string into the printf
statement like printf "%s", "\x3D"
it correctly outputs =
. The same if I have the whole escaped string as a variable.
However, if I only have the 3D
, how can I append the \x
so printf
will print the =
and not \x3D
?
I'm using busybox awk 1.4.2
and the ash
shell.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我不知道你如何在 awk 中做到这一点,但在 perl 中这很简单:
I don't know how you do this in awk, but it's trivial in perl:
GNU awk
或
解码 URL 编码(百分比编码)
GNU awk
Or
Decoding URL encoding (percent encoding)
由于您使用的是 ash 并且 Perl 不可用,我假设您可能没有
gawk
。对我来说,使用
gawk
或 busybox awk,你的第二个示例与第一个示例的工作方式相同(我从两个示例中得到“=”),除非我使用-- posix
选项(在这种情况下,我得到“x3D”)。如果我将
--non-decimal-data
或--traditional
与gawk
一起使用,我会得到“=”。您使用什么版本的 AWK(
awk
、nawk
、gawk
、busybox - 和版本号)?编辑:
您可以通过添加零将变量的字符串值强制转换为数字 1:
Since you're using ash and Perl isn't available, I'm assuming that you may not have
gawk
.For me, using
gawk
or busybox awk, your second example works the same as the first (I get "=" from both) unless I use the--posix
option (in which case I get "x3D" for both).If I use
--non-decimal-data
or--traditional
withgawk
I get "=".What version of AWK are you using (
awk
,nawk
,gawk
, busybox - and version number)?Edit:
You can coerce the variable's string value into a numeric one by adding zero:
这依赖于 gnu awk 对 split 函数的扩展,但这有效:
This relies on gnu awk's extension of the split function, but this works:
首先,我知道这是一个老问题,但没有一个答案对我有用(仅限于 busybox awk)
两种选择。解析标准输入:
要获取命令行参数:
必须最后执行 %25,否则像 %253D 这样的字符串会被双重解析,这是不应该发生的。
y==38 的内联检查是因为 gsub 将 &作为一个特殊字符,除非你反斜杠它。
To start with, I'm aware this is an old question, but none of the answers worked for me (restricted to busybox awk)
Two options. To parse stdin:
To take a command line parameter:
Have to do %25 last because otherwise strings like %253D get double-parsed, which shouldn't happen.
The inline check for y==38 is because gsub treats & as a special character unless you backslash it.
这是其中速度最快的一个,而且它不需要 gawk:
将其另存为
decode_url.awk
并像平常一样使用它。例如:但如果你想要一个更快的版本:
除
mawk
之外的其他解释器应该没有问题。This one is the fastest of them all by a large margin and it doesn't need gawk:
Save it as
decode_url.awk
and use it like you normally would. E.g:But if you want an even faster version:
Other interpreters than
mawk
should have no problem with them.