我将 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 小时会生成一个新用户,我需要使用 find(旧用户号码)和 replace(新用户号码)手动在 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 正则表达式的\<\>单词边界标记,以便您将 userid 作为整个单词进行匹配。

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

相关内容