Aponto wget para example.com e faço download apenas da parte do site que contém o usuário.

Aponto wget para example.com e faço download apenas da parte do site que contém o usuário.

novo neste fórum. Estou tentando criar um roteiro estranho, mas estou preso há alguns dias.

Eu tenho dois arquivos de texto.

Entrada.txt Lista de reprodução.txt

Input.txt Contém um número gerado aleatoriamente a cada 4 horas.

083107

Playlist.txt Contém links M3u.

#EXTINF:-1 tvg-id="" tvg-name="CHAN 1" tvg-logo="" group-title="FTA",CHAN 1
http://xxxxx.com:25461/live/**010707**/11/11594.ts#

EXTINF:-1 tvg-id="" tvg-name="CHAN " tvg-logo="" group-title="FTA",CHAN 2
http://xxxxx.com:25461/live/**010707**/11/11594.ts

Então eu quero encontrar e substituir todas as ocorrências de 010707 e substituí-las pelo número dentro do arquivo Input.txt, neste caso 083107, em seguida, salvar uma cópia do arquivo Playlist.txt e a cada 4 horas substituir esse número novamente por aquele dentro do arquivo Input.txt e assim por diante.

Já montei um script muito feio mas funcional que usa grep e wget para baixar alguns arquivos da internet e gerar aquele arquivo Input.txt.

Obrigado pelo seu tempo.

EDITAR

Todos os dias eu baixo um arquivo M3uPlaylist "Playlist.m3u" de algum site, vamos chamá-lo de example.com.

Porém, a página "example.com" gera um novo usuário a cada 4 horas e preciso substituí-lo no arquivo m3u manualmente usando localizar (número de usuário antigo) e substituir (número de usuário novo).

/live/**010707**/11/11594.ts to /live/**083107**/11/11594.ts

Isto é o que eu descobri:

Aponto wget para example.com e faço download apenas da parte do site que contém o usuário.

wget -qO- 19X.71.5X.252 | grep -oP 'User:.*' > User.txt

Usuário: 083107 Senha: 11

Então eu uso o grep para gerar um arquivo "mais limpo".

grep 'User' User.txt | grep -o '[0-9]*' > Numbers.txt

083107 11 2

Depois disso eu uso o comando "head" para criar um arquivo contendo apenas o nome do usuário.

head -1 Numbers.txt > input.txt

083107

O que eu quero fazer é atualizar automaticamente o arquivo Playlist.txt (ou M3u) com o novo número de usuário que example.com está gerando a cada 4 horas. Usando o arquivo input.txt para isso.

Esta é a parte do código-fonte example.com que contém o usuário.

<!--You need to visit this site every 4 hours in order to get a new user-->
        <div id="domainSearch" class="domain-search--section bg--overlay-color bg--overlay-opacity-95 pd--80-0 text-center" data-bg-img="img/domain-search-img/bg.jpg">
            <div class="container">
                <!-- Domain Search Title Start -->
                <div class="domain-search--title">
                     <h2 class="h3">Whatsapp: &nbsp;&nbsp; +52 </h3>
                    <h2 class="h2">User: 083107      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Password: 11</h2>

Responder1

Eu faria isso:

# extract the userid from the current playlist
prev_user=$(grep -Po '(?<=live/).+(?=/11/11594.ts)' Playlist.txt | head -1)

# find the current userid
current_user=$(wget -qO- 19X.71.5X.252 | grep -oP 'User:\s*\K\S+')

# update the playlist
sed_body=$(printf 's/\<%s\>/%s/g' "$prev_user" "$current_user")
sed -i "$sed_body" Playlist.txt

Esse grep regex deve encontrar apenas os caracteres sem espaço após "Usuário:" (ou seja, o ID do usuário). Dessa forma, você não precisa dos outros arquivos temporários.

Eu também uso os marcadores de limite de palavra \<e \>para o regex sed para que você corresponda ao ID do usuário como uma palavra inteira.

Responder2

Versão atualizada

Considerando o fato de que "010707" é o conteúdo anterior do arquivo "Input.txt", eu mudaria um pouco o script.

PREVIOUS_INPUT=$1
while true
do
   NEW_INPUT=$(cat Input.txt)
   sed -i.backup "s/$PREVIOUS_INPUT/$NEW_INPUT/g" Playlist.txt
   PREVIOUS_INPUT=$NEW_INPUT
   sleep 14400
done

Execute-o com <name-of-the-script>.sh 010707.

E se você acrescentasse em vez de substituir: head -1 Numbers.txt >> Input.txt, tudo seria ainda mais fácil.

while true
do
   sed -i.backup "s/$(tail -2 Input.txt | head -1)/$(tail -1 Input.txt)/g" Playlist.txt
   sleep 14400
done

Resposta original

sedé o que você precisa:https://www.maketecheasier.com/what-is-sed/.

while true
do
   sed "s/010707/$(cat Input.txt)/g" Playlist.txt > NewPlaylist.txt
   sleep 14400
done

Deveria trabalhar.

Você também pode editar Playlist.txt"no local" com -io parâmetro. Eu sugeriria usar -i.backup, neste caso, para armazenar uma versão anterior do arquivo como Playlist.txt.backup.

Você também pode observar Input.txta alteração do arquivo e depois chamar sed.

informação relacionada