Existem inúmeras maneiras de usar um regex para analisar HTML que pode dar errado . Mesmo para uma tarefa aparentemente simples, como a extração de URLs de um arquivo HTML.
Então, não use um regex. Use algo assim:
#! /bin/bash
htmlfile='./file.html'
URL='https://google.com'
links=($(lynx -dump -listonly -nonumbers -force_html "$htmlfile" |
sed -e "s=^file://=$URL="))
printf "%s\n" "${links[@]}"
Isso requer que o lynx esteja instalado. lynx
é um navegador da Web em modo de texto baseado em ncurses. Ele está sendo usado aqui apenas para gerar uma lista de links no arquivo HTML, porque lynx
já resolveu o problema muito mais difícil do que você imagina de como encontrar URLs com segurança em conteúdo HTML (isso é uma parte importante do trabalho de um navegador). Outras linguagens como perl
ou python
possuem bons módulos de biblioteca para analisar HTML para extrair URLs. Para scripts de shell, use lynx
.
Veja man lynx
para detalhes.
lynx
é quase certamente disponível pré-empacotado para sua distribuição Linux ou outro sistema operacional similar a unix. Se não, você pode obter o código-fonte do link acima.