Ich richte wget auf example.com aus und lade nur den Teil der Website herunter, der den Benutzer enthält.

Ich richte wget auf example.com aus und lade nur den Teil der Website herunter, der den Benutzer enthält.

neu in diesem Forum. Ich versuche, ein seltsames Skript durchzuziehen, aber ich stecke seit einigen Tagen fest.

Ich habe zwei Textdateien.

Eingabe.txt Wiedergabeliste.txt

Input.txt Enthält eine Zahl, die alle 4 Stunden zufällig generiert wird.

083107

Playlist.txt enthält M3u-Links.

#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

Ich möchte also alle Vorkommen von 010707 suchen und ersetzen und sie durch die Nummer in der Datei Input.txt ersetzen, in diesem Fall 083107. Anschließend möchte ich eine Kopie der Datei Playlist.txt speichern und diese Nummer alle 4 Stunden erneut durch die in der Datei Input.txt ersetzen und so weiter.

Ich habe bereits ein sehr hässliches, aber funktionierendes Skript zusammengestellt, das grep und wget verwendet, um einige Dateien aus dem Internet herunterzuladen und diese Input.txt-Datei zu generieren.

Vielen Dank für Ihre Zeit.

BEARBEITEN

Jeden Tag lade ich eine M3uPlaylist-Datei „Playlist.m3u“ von einer Site herunter, nennen wir sie example.com.

Aber die Seite „example.com“ generiert alle 4 Stunden einen neuen Benutzer und ich muss ihn in der m3u-Datei manuell ersetzen, indem ich „Suchen (alte Benutzernummer)“ und „Ersetzen (neue Benutzernummer)“ verwende.

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

Das ist dabei herausgekommen:

Ich richte wget auf example.com aus und lade nur den Teil der Website herunter, der den Benutzer enthält.

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

Benutzer: 083107 Passwort: 11

Dann verwende ich grep, um eine „sauberere“ Datei zu generieren.

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

083107 11 2

Danach verwende ich den Befehl „head“, um eine Datei zu erstellen, die nur den Benutzernamen enthält.

head -1 Numbers.txt > input.txt

083107

Ich möchte erreichen, dass die Datei Playlist.txt (oder M3u) automatisch mit der neuen Benutzernummer aktualisiert wird, die example.com alle 4 Stunden generiert. Dazu verwende ich die Datei input.txt.

Dies ist der Teil des Quellcodes von example.com, der den Benutzer enthält.

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

Antwort1

Ich würde Folgendes tun:

# 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

Dieser Grep-Regex sollte nur die Zeichen finden, die keine Leerzeichen sind und nach „Benutzer:“ (also der Benutzer-ID) stehen. Auf diese Weise benötigen Sie die anderen temporären Dateien nicht.

Ich verwende auch die Wortbegrenzungsmarkierungen \<und \>für den Sed-Regex, damit die Benutzer-ID als ganzes Wort abgeglichen wird.

Antwort2

Aktualisierte Version

In Anbetracht der Tatsache, dass „010707“ der vorherige Inhalt der Datei „Input.txt“ ist, würde ich das Skript ein wenig ändern.

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

Führen Sie es mit aus <name-of-the-script>.sh 010707.

Und wenn Sie anhängen statt überschreiben würden: head -1 Numbers.txt >> Input.txt, wäre das Ganze noch einfacher.

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

Ursprüngliche Antwort

sedist was Sie brauchen:https://www.maketecheasier.com/was-ist-sed/.

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

sollte arbeiten.

Playlist.txtSie können auch „an Ort und Stelle“ mit Parametern bearbeiten -i. Ich würde -i.backupin diesem Fall jedoch vorschlagen, zu verwenden, um eine frühere Version der Datei als zu speichern Playlist.txt.backup.

Sie können auch auf Input.txtDateiänderungen warten und dann aufrufen sed.

verwandte Informationen