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 estiver analisando for bem-comportado.
Para obter apenas URLs que estão no href
atributo de <a>
elementos, acho mais fácil fazê-lo em vários estágios. A partir dos 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 como isto:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
onde 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 ocorrem como href
atributo de qualquer <a>
elemento em cada linha. A -i
opção para o primeiro grep
comando é garantir que ele funcione nos elementos <a>
e <A>
. Eu acho que você também pode dar -i
ao segundo grep
para capturar HREF
atributos em maiúsculas , OTOH, eu prefiro ignorar HTML quebrado. :)
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, pois sou redirecionado para a página australiana do Google.