2012-02-24 9 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のアンパサンドは、「&」と表示する必要があります。 –

+0

@muistooshort - パーサーがほしいと思わない...この1つのケースに興味がある...私はURLが&であるべきだと思ったが、この1つのウェブサイトはアンエスケープされていて、それに多くのリンクがあるそれを目標とするのが良いでしょう。 – user983223

+0

HTMLのURL形式は、リモートサーバーに送信されるURLとは異なります。ブラウザはURLを送信する前にHTMLのデコードを適用することになっています。おそらく、あなたは 'href'属性を抽出し、その場でそれらを置き換えるのではなく抽出属性をHTMLデコードしたいと思うかもしれません。 –

答えて

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;をしたいはずです。

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>' 

は簡単

関連する問題