2012-02-24 24 views
0

我知道s/&/\&/g會替換所有已轉義的&符號並用&符替換它們。我想要更挑剔。如果他們在href中,我只想替換那些被忽略的&符號。我無法弄清楚。在href中更改&符

我嘗試以下,但它不工作:

echo "<a href="http://example.com?q=man&amp;string=1&amp;bat=2">Link</a>" | sed -E 's/^href="(.*)&amp;/\1&/g' 

它沒有工作。我還看到另外一個問題,那就是隻能做一個逃脫的&符號的第一個實例,而不是全部。任何人都知道解決方案可能是什麼?

+2

你有一個HTML解析器訪問語言運行?順便說一句,HTML屬性*內的URL中的&符號應該表示爲'&',否則您可能冒險發生有趣和意外的行爲。 – 2012-02-24 07:08:01

+0

@ muistooshort - 不想要解析器...只是對這種情況感興趣...我認爲這個網址應該是&,但是這個網站只有在非轉義的情況下才有效,因此它有很多鏈接將是很好的目標。 – user983223 2012-02-24 07:26:59

+0

HTML中的URL格式與發送到遠程服務器的URL不同。瀏覽器應該在發送URL之前應用HTML解碼。也許你想提取'href'屬性,然後HTML解碼提取屬性,而不是原地替換它們。 – 2012-02-24 07:35:53

回答

0

不知道如何與sed做到這一點,但這裏的紅寶石:

echo '<a href="http://example.com?q=man&amp;string=1&amp;bat=2">Link</a>' | ruby -pe '$_.gsub!(/href="([^"]*)"/) { |h| h.gsub("&amp;", "&") }' 

但是,我完全支持@ muistooshort的評論:除非你正在做一些奇怪的,你應該要在那裏&amp;

0
perl -e '$url=$ARGV[0]; while ($url =~ s/(<a href="[^"]+?)&amp;/$1&/){};print "$url\n"' '<a href="http://example.com?q=man&amp;string=1&amp;bat=2">Link</a>' 

易於修正通過文件