Extraindo Strings de Texto no terminal

1

Eu estou querendo saber se existe uma maneira de baixar (com wget provavelmente) um arquivo html, digamos http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html

Aqui está o arquivo html em pastebin . Aqui está o material importante embora.

<script type='text/javascript'>  jwplayer("flvplayer").setup({ 
file: "http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4",
skin: "beelden",
image: "http://77.81.98.228:8777/i/03/00494/wrdlm4dbigu4.jpg",

Eu preciso extrair http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4 desse arquivo html.

para que o texto entre file: e ",

Sou novo no Ubuntu e em uma interface de terminal, por isso não estou familiarizado com os códigos de linha de comando básicos.

    
por terdon 25.12.2015 / 19:33

2 respostas

0

Primeiro, um aviso obrigatório. Geralmente é uma idéia muito ruim para tentar analisar HTML com ferramentas simples como expressões regulares. Dito isso, nesse caso, se você tiver certeza de que o que deseja sempre estará entre file: e o primeiro , , você pode usar:

wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html 2>/dev/null | 
    grep -oP 'file:\K[^,]*'

Você precisa que o -O - indique wget para imprimir o html como padrão, em vez de salvar em um arquivo. Isso é canalizado por meio de grep com expressões regulares compatíveis com Perl ( -P ) e -o para informar que apenas imprime a parte correspondente da linha. A regex em si procura file: e, em seguida, descarta-a ( \K ) e, em seguida, 0 ou mais caracteres não- , ( [^,]* ). O 2>/dev/null descarta as mensagens do wget.

Note que no URL de exemplo que você deu, há três correspondências:

$ wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html | grep -oP 'file:\K[^,]*'
"http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebwqbtaozwssfetq/v.mp4"
"http://vodlocker.com/dl?op=get_slides&file_code=wrdlm4dbigu4"
"http://vodlocker.com/images/vodjw_logo.png"

Se você sabe que só precisa do primeiro, use -m 1 para informar grep para parar após o primeiro jogo:

$ wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html 2>/dev/null | 
    grep -m1 -oP 'file:\K[^,]*'
"http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebwqbtaozyasfetq/v.mp4"
    
por terdon 25.12.2015 / 19:41
0

Usando grep com PCRE ( -P ):

grep -Po 'file:\s"\K[^"]+\.mp4(?=",)' file.txt

Usando sed :

sed -nr 's/.*file: "([^"]+\.mp4)",//p' file.txt

Ambos encontram a string desejada entre file " e ", , também precisamos corresponder .mp4 antes de ", para que outras sequências indesejadas não apareçam na saída.

Exemplo:

% wget -q -O- http://pastebin.com/raw/eQFTp0cy | grep -Po 'file:\s"\K[^"]+\.mp4(?=",)' 
http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4


% wget -q -O- http://pastebin.com/raw/eQFTp0cy | sed -nr 's/.*file: "([^"]+\.mp4)",//p'
http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4
    
por heemayl 25.12.2015 / 19:42