Como eu disse no meu comentário, geralmente não é uma boa ideia analisar HTML com Expressões Regulares, mas às vezes você pode se safar se o HTML que você está analisando for bem comportado.
Para obter somente os URLs que estão no atributo href
de <a>
elements, acho mais fácil fazer isso em vários estágios. De seus comentários, parece que você deseja apenas o domínio de nível superior, não o URL completo. Nesse caso, você pode usar algo assim:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
em que source.html
é o arquivo que contém o código HTML para analisar.
Este código imprimirá todos os URLs de nível superior que ocorrerem como o atributo href
de todos os elementos <a>
em cada linha. A opção -i
para o primeiro comando grep
é para garantir que funcionará nos elementos <a>
e <A>
. Eu acho que você também poderia dar -i
ao segundo grep
para capturar os atributos HREF
em maiúsculas, OTOH, eu prefiro ignorar esse HTML corrompido. :)
Para processar o conteúdo de http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
saída
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
Minha saída é um pouco diferente dos outros exemplos, já que sou redirecionada para a página do Google australiana.