新加入這個論壇。我正在嘗試編寫一個奇怪的腳本,但我已經被困了幾天了。
我有兩個文字檔。
輸入.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: +52 </h3>
<h2 class="h2">User: 083107 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
.