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: +52 </h3>
<h2 class="h2">User: 083107 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
-i
o 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.txt
a alteração do arquivo e depois chamar sed
.