Eu gostaria de encadear, mas um pouco diferente. Se você tem um trecho de texto como o seu em um arquivo de texto chamado strings.txt, você pode fazer o seguinte:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)//g' | grep IWANTthis | sort -u
Explicação:
grep http ./st3.txt => will catch lines with http from text file
sed 's/http/\nhttp/g' => will insert newline before each http
grep ^http => will take only lines starting with http
sed 's/\(^http[^ <]*\)\(.*\)//g'
=> will preserve string from ^http until first space or < (the latter in hope if
grep IWANTthis => will take only urls containing your text of your interest; you can omit this.
sort -u => will sort the list and remove duplicates from it
Como há uma chance de o URL não funcionar, você pode fazer uma verificação de erros adicional com seu URL de interesse. por exemplo. wget -p URL -O /dev/null
- imprimirá códigos de erro bastante diferentes caso a URL não esteja disponível, portanto você pode configurar um loop para processar sua lista de links e gerar seu status de validade.
Se você estiver extraindo links de arquivos html, pode haver algum problema com sed
em casos especiais. Como foi sugerido em um ) que você provavelmente já viu - pode ser melhor não usar regexps, mas um mecanismo de análise de html. Um analisador tão facilmente disponível é o texto apenas navegador lynx
(disponível em qualquer linux). Isso permite que você esvazie instantaneamente a lista de todos os links em um arquivo e, em seguida, apenas extraia os URLs desejados com o grep.
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
No entanto, isso não funcionará na maioria dos arquivos HTML ou trechos de texto com links.