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: +52 </h3>
<h2 class="h2">User: 083107 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
sed
es 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
-i
el parámetro. Sin embargo, sugeriría usarlo -i.backup
en este caso para almacenar una versión anterior del archivo como Playlist.txt.backup
.
También puede observar el Input.txt
cambio de archivos y luego llamar sed
.