Suponho que o URI termine com um espaço: grep -o 'magnet://[^ ]*' filename
Atualizar : grep -o "magnet:?xt[^']*" filename
Atualizar : cat * | grep -o "magnet:?xt[^']*"
ou grep -oh "magnet:?xt[^']*" *
Como posso extrair de um determinado número de arquivos todos os URIs como magnet:
file:
? Eu gostaria de ter um URI por linha como saída.
Eu gostaria de usar bash para conseguir isso, mas qualquer sugestão é bem vinda.
Estou usando o debian 7.
A entrada é um monte de arquivos html com nomes aleatórios. Os URIs estarão todos em a href
tags HTML como: <a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>
. Não há um esquema de como os URIs são armazenados em cada arquivo, pode haver URIs n por arquivo e eles podem estar em qualquer lugar nos arquivos.
A saída esperada deve ser uma lista com valores separados por um novo caractere de linha, como:
magnet:?xt.......
magnet:?xt.......
magnet:?xt.......
Com GNU grep
, você pode tentar:
$ echo "<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>" |
grep -oP "magnet.*(?=')"
magnet:?xt=something1:something1:somerandomcharacters
Você pode ter aspas simples e duplas como delimitador e na semana passada eu vi alguém usar nenhum delimitador, o que é frustrante se você tentar usar o caractere antes da parte do protocolo como indicador final. Também você pode ter caminhos relativos e eles são links válidos também. E você pode ter um atributo href em uma tag a-tag ou um atributo src em uma tag img e assim por diante.
A maneira correta seria analisar todo o documento como html / xml e, em seguida, percorrer todos os elementos, extrair todos os atributos deles e corresponder o valor ao seu padrão. Se você se importa com caminhos relativos, você precisa expandi-los também com o URL que você usou para fazer o download. PHP ou Perl devem ter funções para esta análise de árvore DOM. Qualquer outra solução com grep ou similar provavelmente irá pular algumas das URLs ou truncar muito cedo.
Talvez curl ou wget tenham algum recurso interessante para criar essa lista, provavelmente wget no modo spider.