Eu iria encadear, mas um pouco diferente. Se você tiver um snippet de texto como o seu em um arquivo de texto chamado strings.txt, poderá fazer o seguinte:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/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[^ <]*\)\(.*\)/\1/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 existe a possibilidade de o URL não funcionar, você pode fazer uma verificação de erro adicional com seu URL de interesse. por exemplo wget -p URL -O /dev/null
- ele imprimirá códigos de erro bastante diferentes, caso a URL não esteja disponível, para que você possa configurar um loop para processar sua lista de links e gerar seu status de validade.
Se você estiver finalmente extraindo links de arquivos html, poderá haver alguns problemas sed
em casos especiais. Como foi sugerido em uma postagem engraçada que você provavelmente já viu - talvez seja melhor não usar regexps, mas um mecanismo de analisador de html. Um desses analisadores facilmente disponíveis é o navegador somente de texto lynx
(disponível em qualquer linux). Isso permite que você despeje instantaneamente a lista de todos os links em um arquivo e 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 mutilados ou trechos de texto com links.