Substituir um valor em URL

0

Sou novo no mundo Linux e preciso de ajuda. Eu tenho dois arquivos:

Um arquivo token.txt com uma string como esta: xd2111Vf124FfmrfJ22fag

E um arquivo playlist.m3u com o seguinte:

EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=nd2451SVf124dfKwJ22sds

EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=nd2451SVf124dfKwJ22sds

Como posso substituir todos os valores de token nesse arquivo usando o conteúdo do arquivo token.txt que está sendo atualizado. Aprecie todas as respostas ...

Eu quero fazer um script bash e automatizá-lo com o crontab mais tarde.

    
por Kenth Kvien 07.09.2017 / 23:27

1 resposta

1

Usando sed :

sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u 

Com o exemplo dado, isso produziria

EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=xd2111Vf124FfmrfJ22fag

EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=xd2111Vf124FfmrfJ22fag

O comando sed primeiro encontra qualquer linha que comece com http e substitua tudo após o primeiro = nessas linhas com o conteúdo do arquivo token.txt (esse arquivo deve conter apenas o novo token em um linha).

Isso funciona permitindo que o shell expanda a substituição do comando $(<token.txt) dentro da parte de substituição da substituição. Isso insere o conteúdo do arquivo na expressão sed .

Para atualizar o arquivo, use sed com sua opção -i ou redirecione a saída para um novo arquivo e renomeie:

sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u >new && mv new playlist.m3u

A remoção de ^ de ^http faria com que sed procurasse http em qualquer lugar da linha, não apenas no início. Remova ^ se você tiver mais dados em frente ao URL.

    
por 07.09.2017 / 23:52