Quero analisar determinados URLs de um arquivo salvoHTML-file com um simples script/comando bash, para que eu possa baixá-los via wget
posterior.
O que tenho até agora é:
awk 'BEGIN{ RS="<a *href *= *\""} NR>2 {sub(/".*/,"");print; }' index.html >> url-list.txt
que grava todos os links que estão dentro do meu arquivo html em um documento txt elegante.
O que eu preciso, no entanto, são apenas links específicos
- de um determinado domínio
- todos os arquivos .ogg, por exemplo
tudo que no final ficaria assim:
http://www.foo.com/(pasta aleatória)/(nome da base aleatória).ogg
ou
http://subdomínio.foo.com/(pasta aleatória)/(outrasubpasta aleatória)/(nome da base aleatória).ogg
desde já, obrigado!
Responder1
Você diz que precisa fazer isso "no Bash", mas parece querer dizer "em um script" e não "usando sintaxe pura do Bash" (há uma diferença). Presumo que você queira o significado "em um script".
Se você salvou todos os links em linhas separadas em um documento, poderá selecionar todos os links do domínio, http://www.example.com/
por exemplo
grep "^http://www\.example\.com/" filewithlinks.txt
ou todos os links que terminam .ogg
com
grep "\.ogg$" filewithlinks.txt
(A barra invertida precedendo os pontos é para escapar do .
sinal " ", que de outra forma significa "qualquer caractere". " \.
" significa um ponto literal. Sem escapar, você também corresponderá aos links que terminam com, por exemplo, "logg".)
Você também poderia fazer a correspondência de linha diretamente no awk
comando, mas seria mais complicado mudar de vez em quando, acredito. A maneira mais fácil é salvar a lista completa de links em um arquivo como você faz e depois pesquisar o arquivo, por exemplo, grep
como acima. Assim, você também não precisará baixar e analisar o documento novamente se quiser alterar o padrão de correspondência.