Сценарий для нахождения и заменения

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

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

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 на example.com и загружаю только часть веб-сайта, содержащего пользователя.

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

Пользователь: 083 107     паролей: 11

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

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: &nbsp;&nbsp; +52 </h3>
                    <h2 class="h2">User: 083107      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Password: 11</h2>
0
задан 7 June 2018 в 12:06

2 ответа

Я сделал бы это:

# 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, таким образом, Вы соответствуете идентификатору пользователя в целом слово.

3
ответ дан 29 October 2019 в 04:11

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

Рассматривая то, которое "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.

1
ответ дан 29 October 2019 в 04:11

Другие вопросы по тегам:

Похожие вопросы: