Señalo wget a example.com y descargo solo la parte del sitio web que contiene al usuario.

Señalo wget a example.com y descargo solo la parte del sitio web que contiene al usuario.

nuevo en este foro. Estoy intentando realizar un guión extraño, pero llevo algunos días estancado.

Tengo dos archivos de texto.

Entrada.txt Lista de reproducción.txt

Input.txt Contiene un número que se genera aleatoriamente cada 4 horas.

083107

Playlist.txt Contiene enlaces 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

Entonces quiero encontrar y reemplazar todas las apariciones de 010707 y reemplazarlas con el número dentro del archivo Input.txt, en este caso 083107, luego guardar una copia del archivo Playlist.txt y cada 4 horas reemplazar ese número nuevamente con el dentro del archivo Input.txt y así sucesivamente.

Ya he creado un script muy feo pero funcional que usa grep y wget para descargar algunos archivos de Internet y generar ese archivo Input.txt.

Gracias por tu tiempo.

EDITAR

Todos los días descargo un archivo M3uPlaylist "Playlist.m3u" de algún sitio, llamémoslo ejemplo.com.

Pero la página "example.com" genera un nuevo usuario cada 4 horas y necesito reemplazarlo en el archivo m3u manualmente usando buscar (número de usuario anterior) y reemplazar (número de usuario nuevo).

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

Esto es lo que se me ocurrió:

Señalo wget a example.com y descargo solo la parte del sitio web que contiene al usuario.

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

Usuario: 083107 Contraseña: 11

Luego uso grep para generar un archivo "más limpio".

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

083107 11 2

Después de eso, uso el comando "head" para crear un archivo que contenga únicamente el nombre de usuario.

head -1 Numbers.txt > input.txt

083107

Lo que quiero lograr es actualizar automáticamente el archivo Playlist.txt (o M3u) con el nuevo número de usuario que example.com genera cada 4 horas. Usando el archivo input.txt para eso.

Esta es la parte del código fuente de example.com que contiene al usuario.

<!--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>

Respuesta1

Yo haría esto:

# 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

Esa expresión regular grep debería encontrar los caracteres que no sean espacios después de "Usuario:" (es decir, el ID de usuario). De esta manera no necesitarás los otros archivos temporales.

También utilizo los marcadores de límite de palabras \<y \>para la expresión regular sed para que coincida con el ID de usuario como una palabra completa.

Respuesta2

Versión actualizada

Teniendo en cuenta el hecho de que "010707" es el contenido anterior del archivo "Input.txt", cambiaría un poco el 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

Ejecútelo con <name-of-the-script>.sh 010707.

Y si agregaras en lugar de sobrescribir: head -1 Numbers.txt >> Input.txt, todo sería aún más 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

Respuesta original

sedes lo que necesitas:https://www.maketecheasier.com/what-is-sed/.

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

Deberia trabajar.

También puedes editar Playlist.txt"in situ" con -iel parámetro. Sin embargo, sugeriría usarlo -i.backupen este caso para almacenar una versión anterior del archivo como Playlist.txt.backup.

También puede observar el Input.txtcambio de archivos y luego llamar sed.

información relacionada