2015-09-25 65 views
0

下面的sed表達解碼HTML URL編碼(完全是必填項): SED的/%/ \ X/G' HTML編碼參考可以在這裏找到: http://www.w3schools.com/tags/ref_urlencode.aspsed解碼html編碼。需要解釋如何

不過,我可以」不管它如何工作。正則表達式似乎說:找到「%」並用字符串中的「\ x」代替它,但它做得更多。爲什麼它在這裏做解碼?

Example: 
$ echo "This%20%2C%20character%20is%20comma" | echo -e "$(sed 's/%/\\x/g')" 
This , character is comma 

回答

0

sed的正在改變每%\x所以sed 's/%/\\x/g'改變%2C\x2C,例如,然後echo -e "\x2C"解碼在十六進制轉義序列字面,進行打印。

當您想要將文字%字符作爲字符串的一部分進行打印時,該方法將失敗。你可以用sed -r 's/%([[: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 +回聲版本持續時間較長,但更容易提升,如果你想用字符串做多。

+1

謝謝Ed,幫助和分享想法。 – Top