Antes de mais nada, não tente analisar HTML com regex ...
XPath pode conseguir o que você quer - foi projetado especificamente para isso:
//a/@href
Em seguida, para fazer uso do XPath com xmllint
(outros utilitários existirão):
xmllint --shell --html file.html <<<'cat //a/@href'
Isso vai te dar um monte de coisas, incluindo prompts ( / >
), o nome do atributo ( href="..."
) e separadores ( -------
) ... então filtrá-los, classificar e obter uma lista de URLs únicos:
xmllint --shell --html file.html <<<'cat //a/@href' \
| sed '/^ href="/!d;s/^ href="//;s/"$//' \
| sort \
| uniq
Tudo sem grep
.
Aqui, usamos sed
para:
-
/^ href="/!d
- exclua todas as linhas que não correspondem à regex^ href="
-
s/^ href="//
- recorte o prefixo -
s/"$//
- recorte o sufixo
Como alternativa, você pode usar seletores CSS em vez de XPath, com tq
(um projeto em Python):
tq 'a' -a href < file.html
Nota: após a discussão em torno de grep
, eu presumi que o Unix ... Se você tem o Cygwin ou o WSL, então isso provavelmente funcionará lá também.
xmllint
(um utilitário de libxml2 ) tem uma versão do Windows.