我是 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 前面有更多数据,请删除。