以下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
答案 0 :(得分:0)
sed正在将每个%
更改为\x
,以便sed 's/%/\\x/g'
将%2C
更改为\x2C
,然后echo -e "\x2C"
解码该十六进制将序列转义为文字,
以进行打印。
当您想要将字面值%
字符串作为字符串的一部分打印时,该方法将失败。您可以使用sed -r 's/%([[:xdigit:]]{2})/\\x\1/g'
使其更加健壮,但对于阻止发生错误匹配的少数情况,可能不值得增加复杂性。
使用GNU awk的FWIW你可以做到:
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版本更长,但如果你想对字符串做更多的事情,则更容易增强。