в новинку для этого форума. Я пытаюсь осуществить странный сценарий, но я застреваюсь в течение нескольких дней теперь.
У меня есть два текстовых файла.
Input.txt Playlist.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
Таким образом, я хочу найти и заменить все случаи 010 707 и заменить их числом в файле Input.txt в этом случае 083107, затем сохраняют копию файла Playlist.txt и каждые 4 часа заменяют то число снова одной внутренней частью файл Input.txt и так далее.
Я уже соединил очень ужасный, но рабочий сценарий, который использует grep и wget, чтобы загрузить некоторые файлы Интернета и генерировать тот файл Input.txt.
Спасибо за Ваше время.
Править
Каждый день я загружаю файл "Playlist.m3u" M3uPlaylist с некоторого сайта, позволяет, называют это example.com.
Но, страница "example.com" генерирует нового пользователя каждые 4 часа, и я должен заменить ее в m3u файле вручную с помощью, находят (Старый код пользователя) и замена (новый код пользователя).
/live/**010707**/11/11594.ts to /live/**083107**/11/11594.ts
Это - то, что я придумал:
wget -qO- 19X.71.5X.252 | grep -oP 'User:.*' > User.txt
Пользователь: 083 107 паролей: 11
grep 'User' User.txt | grep -o '[0-9]*' > Numbers.txt
083107 11 2
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: +52 </h3>
<h2 class="h2">User: 083107 Password: 11</h2>
Я сделал бы это:
# 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 regex должно просто найти непробелы после "Пользователя": (т.е. идентификатор пользователя). Таким образом, Вам не нужны другие временные файлы.
Я также использую \<
и \>
пограничные маркеры слова для sed regex, таким образом, Вы соответствуете идентификатору пользователя в целом слово.
Рассматривая то, которое "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
.