替换 URL 中的值

替换 URL 中的值

我是 Linux 世界的新手,需要一些帮助。我有两个文件:

一个 token.txt 文件,其中包含如下字符串:xd2111Vf124FfmrfJ22fag

以及一个包含以下内容的 playlist.m3u 文件:

EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=nd2451SVf124dfKwJ22sds

EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=nd2451SVf124dfKwJ22sds

如何使用正在更新的 token.txt 文件的内容替换此文件中的所有令牌值。感谢所有的答案...

我想制作一个 bash 脚本,稍后用 crontab 自动化它。

答案1

使用sed

sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u 

对于给定的示例,这将产生

EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=xd2111Vf124FfmrfJ22fag

EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=xd2111Vf124FfmrfJ22fag

sed命令首先查找以 开头的任何行http,然后将=这些行中第一行之后的所有内容替换为文件的内容token.txt(该文件应仅包含一行上的新标记)。

这是通过允许 shell$(<token.txt)在替换的替换部分内扩展命令替换来实现的。这会将文件的内容插入到sed表达式中。

要就地更新文件,请使用sed-i选项,或将输出重定向到新文件并重命名:

sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u >new && mv new playlist.m3u

删除^from^http会在行中的任何位置sed查找http,而不仅仅是在开头。^如果 URL 前面有更多数据,请删除。

相关内容