Linux sed解码html编码。需要解释一下吗
以下sed表达式解码HTML URL编码(完全按照要求): sed's/%/\x/g' HTML编码参考可在此处找到: 然而,我不知道它是如何工作的。正则表达式似乎说:在字符串中找到“%”并用“\x”替换它,但它的作用远不止于此。为什么它在这里做解码Linux sed解码html编码。需要解释一下吗,linux,web,sed,character,decoding,Linux,Web,Sed,Character,Decoding,以下sed表达式解码HTML URL编码(完全按照要求): sed's/%/\x/g' HTML编码参考可在此处找到: 然而,我不知道它是如何工作的。正则表达式似乎说:在字符串中找到“%”并用“\x”替换它,但它的作用远不止于此。为什么它在这里做解码 Example: $ echo "This%20%2C%20character%20is%20comma" | echo -e "$(sed 's/%/\\x/g')" This , character is comma sed正在将每个%更改
Example:
$ echo "This%20%2C%20character%20is%20comma" | echo -e "$(sed 's/%/\\x/g')"
This , character is comma
sed正在将每个
%
更改为\x
,因此sed的/%/\\x/g'
将%2C
更改为\x2C
,然后echo-e“\x2C”
将十六进制转义序列解码为文本,
,以便打印
当您想将文本%
字符作为字符串的一部分打印时,这种方法将失败。您可以使用sed-r的/%([[:xdigit:]{2})/\\x\1/g'
使它更健壮一些,但在少数情况下,它可能不值得增加复杂性,因为它会阻止错误匹配的发生
FWIW使用GNU awk,您可以执行以下操作:
echo "This%20%2C%20character%20is%20comma" |
awk -niord '{
head = ""
tail = $0
while ( match(tail,/%(..)(.*)/,a) ) {
head = head substr(tail,1,RSTART-1) chr("0x"a[1])
tail = a[2]
}
print head tail
}'
This , character is comma
比sed+echo版本更长,但如果您想更多地使用字符串,则更容易增强。谢谢您的帮助和分享想法。