如何从网页的固定格式链接中提取动态变化的版本号
如何从网页的固定格式链接中提取动态变化的版本号
看起来你已经用wget和grep拿到了目标网页的内容,现在就差精准提取那个动态变化的版本号啦~我给你几个简单好用的命令行方案,都是基于你已经在使用的工具,不用额外安装软件:
方法一:用grep的Perl正则模式(最精准)
这个方法利用正则的正向/反向匹配,直接定位你要的版本号部分,只输出匹配结果:
wget -qO - www.factorio.com/download | grep -oP '/get-download/\K[^/]+(?=/headless/linux64)'
简单解释下参数和正则:
-o:只输出匹配到的内容,而不是整行-P:启用Perl兼容正则表达式\K:忽略掉前面匹配的/get-download/部分,只保留后面的内容[^/]+:匹配所有非斜杠的字符(也就是你要的版本号)(?=/headless/linux64):确保后面跟着/headless/linux64,精准锁定目标链接
方法二:用awk分割字符串
如果你更习惯awk的处理方式,可以用分割字符串的方法提取版本号:
wget -qO - www.factorio.com/download | awk '/\/get-download\/.*\/headless\/linux64/ {split($0, parts, "/"); print parts[3]}'
逻辑很直观:
- 先筛选出包含
/get-download/.../headless/linux64的行 - 用
split把整行按斜杠/分割成数组parts - 版本号正好是数组的第3个元素(因为路径开头的
/会分割出一个空元素,所以索引从1开始算的话,get-download是第2个,版本号就是第3个)
方法三:用sed替换提取
sed的替换功能也能轻松搞定这个需求:
wget -qO - www.factorio.com/download | sed -n 's/.*\/get-download\/\([^/]*\)\/headless\/linux64.*/\1/p'
说明:
-n:关闭默认的行输出,只打印我们指定的内容s/原内容/替换内容/p:把整行中符合模式的部分替换成我们要的版本号,然后打印出来\([^/]*\):捕获版本号的部分,\1引用这个捕获的内容,最终只输出版本号
这些方法都能精准提取你需要的动态版本号,不管版本号是长是短,只要符合/get-download/版本号/headless/linux64的格式就没问题~
备注:内容来源于stack exchange,提问作者Mist
相关产品推荐
相关产品推荐

