我將 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 檔案。

感謝您的時間。

編輯

我每天都會從某個網站(我們稱為 example.com)下載一個 M3uPlaylist 檔案「Playlist.m3u」。

但是,頁面「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

用戶:083107 密碼:11

然後我使用 grep 產生一個「更乾淨」的檔案。

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

083107 11 2

之後,我使用“head”命令建立一個僅包含使用者名稱的檔案。

head -1 Numbers.txt > input.txt

083107

我想要完成的是使用 example.com 每 4 小時產生的新使用者號碼自動更新 Playlist.txt (或 M3u)檔案。為此使用 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:」之後的非空格字元(即使用者 ID)。這樣您就不需要其他臨時檔案。

我還在 sed 正規表示式中使用\<\>單字邊界標記,以便將用戶 ID 作為整個單字進行匹配。

答案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.

相關內容