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' href
attribut 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.html
est le fichier contenant le code HTML à analyser.
Ce code imprimera toutes les URL de niveau supérieur qui apparaissent comme l' href
attribut de tous les <a>
éléments de chaque ligne. L' -i
option de la première grep
commande est de faire en sorte que cela fonctionnera sur les deux <a>
et <A>
éléments. Je suppose que vous pourriez aussi donner -i
au 2egrep
pour capturer les HREF
attributs 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.