一部のHTMLリンクを置き換えて新しいタブで開くようにします(同じページへのリンクを除く)。
私の問題を説明するダミーHTMLページは次のとおりです。私はそれを呼ぶテスト.html。
<p>
This is the <a href="https://www.google.com/">Google link</a>
</p>
<p>
And these are <a href="https://twitter.com/">Twitter link</a> and <a href="https://www.instagram.com/">Instagram link</a>.
</p>
このコードを使用してリンクを見つけ、それを追加のコンテンツに置き換えます。
sed -E 's/(<a href="[^#]+[-a-zA-Z0-9@:%._\+~#=/?&]+")(>)/\1 target="_blank">/g' test.html
結果は次のとおりです。
<p>
This is the <a href="https://www.google.com/" target="_blank">Google link</a>
</p>
<p>
And these are <a href="https://twitter.com/">Twitter link</a> and <a href="https://www.instagram.com/" target="_blank">Instagram link</a>.
</p>
追加項目に注意してくださいtarget="_blank"
。一致するものが複数ない場合、期待どおりに動作します。 1行に一致する項目が複数ある場合は、一番右の項目のみが置き換えられます。ライン全体をブロックとして検出するようです。
これを調査した後、検出ブロックを分割するために否定を追加するよう提案した。だからタグを閉じるために否定を追加しました>
。したがって、^>
コードは次のようになります。
sed -E 's/(<a href="[^#]+[-a-zA-Z0-9@:%._\+~#=/?&^>]+")(>)/\1 target="_blank">/g' test.html
しかし、これはあまり効果がないようです。たぶん私は何か間違っていたかもしれません。
実行/テストsed 4.7。実行するように設計sed 4.4。
ベストアンサー1
この式は、[^#]+
最初のhrefから2番目のhrefの終わりまでのすべての項目と一致します。でのみ始まるリンクを避けたい場合#
。+