Comme je l'ai dit dans mon commentaire, ce n'est généralement pas une bonne idée d'analyser le HTML avec des expressions régulières, mais vous pouvez parfois vous en tirer si le HTML que vous analysez se comporte bien.
Afin d'obtenir uniquement les URL qui se trouvent dans l' hrefattribut des <a>éléments, je trouve qu'il est plus facile de le faire en plusieurs étapes. D'après vos commentaires, il semble que vous ne souhaitiez que le domaine de premier niveau, pas l'URL complète. Dans ce cas, vous pouvez utiliser quelque chose comme ceci:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
où source.htmlest le fichier contenant le code HTML à analyser.
Ce code imprimera toutes les URL de niveau supérieur qui apparaissent comme l' hrefattribut de tous les <a>éléments de chaque ligne. L' -ioption de la première grepcommande est de faire en sorte que cela fonctionnera sur les deux <a>et <A>éléments. Je suppose que vous pourriez aussi donner -iau 2egrep pour capturer les HREFattributs majuscules , OTOH, je préférerais ignorer un tel HTML cassé. :)
Pour traiter le contenu de http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
production
http://www.google.com.au
http://maps.google.com.au
https://play.google.com
http://www.youtube.com
http://news.google.com.au
https://mail.google.com
https://drive.google.com
http://www.google.com.au
http://www.google.com.au
https://accounts.google.com
http://www.google.com.au
https://www.google.com
https://plus.google.com
http://www.google.com.au
Ma sortie est un peu différente des autres exemples car je suis redirigé vers la page Google australienne.