Я указываю wget на example.com и загружаю только ту часть сайта, которая содержит пользователя.

Я указываю wget на example.com и загружаю только ту часть сайта, которая содержит пользователя.

Новичок на этом форуме. Я пытаюсь реализовать странный скрипт, но застрял на несколько дней.

У меня есть два текстовых файла.

Входной.txt Список воспроизведения.txt

Input.txt Содержит число, которое генерируется случайным образом каждые 4 часа.

083107

Playlist.txt Содержит ссылки 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

Поэтому я хочу найти и заменить все вхождения 010707 и заменить их на номер внутри файла Input.txt, в данном случае 083107, затем сохранить копию файла Playlist.txt и каждые 4 часа снова заменять этот номер на номер внутри файла Input.txt и так далее.

Я уже составил очень уродливый, но работающий скрипт, который использует grep и wget для загрузки некоторых файлов из интернета и генерации файла Input.txt.

Спасибо за ваше время.

РЕДАКТИРОВАТЬ

Каждый день я скачиваю файл M3uPlaylist «Playlist.m3u» с какого-то сайта, назовем его example.com.

Но страница «example.com» генерирует нового пользователя каждые 4 часа, и мне нужно вручную заменить его в файле m3u, используя find (старый номер пользователя) и replace (новый номер пользователя).

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

Вот что у меня получилось:

Я указываю wget на example.com и загружаю только ту часть сайта, которая содержит пользователя.

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

Пользователь: 083107 Пароль: 11

Затем я использую grep для создания «более чистого» файла.

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

083107 11 2

После этого я использую команду «head», чтобы создать файл, содержащий только имя пользователя.

head -1 Numbers.txt > input.txt

083107

Я хочу автоматически обновить файл Playlist.txt (или M3u) новым номером пользователя, который example.com генерирует каждые 4 часа. Для этого используется файл input.txt.

Это часть исходного кода example.com, содержащая пользователя.

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

решение1

Я бы сделал так:

# 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

Это регулярное выражение grep должно просто найти непробельные символы после "User:" (т.е. идентификатор пользователя). Таким образом, вам не понадобятся другие временные файлы.

Я также использую маркеры границ слов \<и \>для регулярного выражения sed, чтобы сопоставить идентификатор пользователя как целое слово.

решение2

Обновленная версия

Учитывая тот факт, что «010707» — это предыдущее содержимое файла «Input.txt», я бы немного изменил скрипт.

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

Запустите его с помощью <name-of-the-script>.sh 010707.

А если бы Вы дописывали, а не перезаписывали:, head -1 Numbers.txt >> Input.txtвсе было бы еще проще.

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

Оригинальный ответ

sedэто то, что Вам нужно:https://www.maketecheasier.com/what-is-sed/.

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

должно сработать.

Вы также можете редактировать Playlist.txt"на месте" с -iпараметром. Я бы предложил использовать -i.backupв этом случае, чтобы сохранить предыдущую версию файла как Playlist.txt.backup.

Вы также можете следить за Input.txtизменением файла, а затем вызывать sed.

Связанный контент