改变href中的&符号

时间:2012-02-24 07:02:37

标签: regex unix command-line sed

我知道s/&/\&/g替换了所有被转义的&符号,并用&符替换它们。我想要更挑剔。我想只更换那些逃脱的&符号,如果他们在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 个答案:

答案 0 :(得分:0)

不确定如何使用sed,但这里是Ruby:

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;

答案 1 :(得分: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>'

轻松修改以运行文件