sed 解码 html 编码。需要解释如何
sed decodes html encoding. Need explanation how
以下 sed 表达式解码 HTML URL 编码(完全按照要求):
sed 's/%/\x/g'
HTML 编码参考可以在这里找到:
http://www.w3schools.com/tags/ref_urlencode.asp
但是,我不明白它是如何工作的。正则表达式似乎在说:在字符串中找到“%”并将其替换为“\x”,但它所做的远不止于此。为什么要在这里解码?
Example:
$ echo "This%20%2C%20character%20is%20comma" | echo -e "$(sed 's/%/\x/g')"
This , character is comma
例如,sed 每隔 %
更改为 \x
,因此 sed 's/%/\x/g'
将 %2C
更改为 \x2C
,然后 echo -e "\x2C"
解码将十六进制转义序列转换为文字 ,
以进行打印。
当您想将文字 %
字符打印为字符串的一部分时,该方法将失败。您可以使用 sed -r 's/%([[:xdigit:]]{2})/\x/g'
使其更加健壮,但在少数情况下可能不值得增加复杂性,因为它会阻止错误匹配的发生。
FWIW 使用 GNU awk 可以做到:
echo "This%20%2C%20character%20is%20comma" |
awk -niord '{
head = ""
tail = [=10=]
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 版本更长,但如果您想对字符串进行更多操作,则更容易增强。
以下 sed 表达式解码 HTML URL 编码(完全按照要求): sed 's/%/\x/g' HTML 编码参考可以在这里找到: http://www.w3schools.com/tags/ref_urlencode.asp
但是,我不明白它是如何工作的。正则表达式似乎在说:在字符串中找到“%”并将其替换为“\x”,但它所做的远不止于此。为什么要在这里解码?
Example:
$ echo "This%20%2C%20character%20is%20comma" | echo -e "$(sed 's/%/\x/g')"
This , character is comma
sed 每隔 %
更改为 \x
,因此 sed 's/%/\x/g'
将 %2C
更改为 \x2C
,然后 echo -e "\x2C"
解码将十六进制转义序列转换为文字 ,
以进行打印。
当您想将文字 %
字符打印为字符串的一部分时,该方法将失败。您可以使用 sed -r 's/%([[:xdigit:]]{2})/\x/g'
使其更加健壮,但在少数情况下可能不值得增加复杂性,因为它会阻止错误匹配的发生。
FWIW 使用 GNU awk 可以做到:
echo "This%20%2C%20character%20is%20comma" |
awk -niord '{
head = ""
tail = [=10=]
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 版本更长,但如果您想对字符串进行更多操作,则更容易增强。