2012-02-24 44 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>' 

易于修正通过文件