Iría por encadenar pero un poco diferente. Si tiene un fragmento de texto como el suyo en un archivo de texto llamado strings.txt, puede hacer lo siguiente:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u
Explicación:
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 la posibilidad de que la url no funcione, puede realizar una comprobación adicional de errores con su URL de interés. por ejemplo wget -p URL -O /dev/null
, imprimirá códigos de error bastante diferentes en caso de que la URL no esté disponible, por lo que podría configurar un bucle para procesar su lista de enlaces y generar su estado de validez.
Si finalmente está extrayendo enlaces de archivos html, puede haber algunos problemas sed
en casos especiales. Como se ha sugerido en una divertida (publicación) que probablemente ya haya visto, puede ser mejor no usar expresiones regulares sino un motor de análisis html. Uno de estos analizadores fácilmente disponibles es el navegador de solo texto lynx
(disponible en cualquier Linux). Esto le permite volcar instantáneamente la lista de todos los enlaces en un archivo y luego simplemente extraer las URL que desee con grep.
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
Sin embargo, esto no funcionará en la mayoría de los archivos html maltratados o fragmentos de texto con enlaces.