изменить амперсанды в href - PullRequest
0 голосов
/ 24 февраля 2012

Я знаю 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 голосов
/ 24 февраля 2012
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>'

Легко исправляется для запуска через файл

0 голосов
/ 24 февраля 2012

Не уверен, как это сделать с 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; там.

...