You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中提取各子版本的最高次版本号?

解决方法:提取每个子版本的最高次版本号

嘿,你已经完成了最关键的一步——筛选出符合要求的版本号!现在要实现每个子版本(比如1.10、1.11)只保留最高的次版本号,用awk就能轻松搞定,给你两种实用的方案:

方案一:用awk分组记录最大值

先把你现有的命令输出(空格分隔的版本号)拆成每行一个,再用awk按「主版本.子版本」分组,记录每个组里最大的次版本号:

curl -v --silent https://website.com.rss 2>&1 | awk -F '<title>|</title>' '{print $2}' | grep "^1\.[0-9][0-9]\." | tr ' ' '\n' | awk -F. '
{
    # 生成分组键:主版本.子版本(比如1.10、1.11)
    key = $1 "." $2
    # 如果当前次版本号比该组已记录的最大值大,就更新最大值
    if ($3 > max[key]) {
        max[key] = $3
    }
}
END {
    # 遍历所有分组,输出完整的最高版本号
    for (k in max) {
        print k "." max[k]
    }
}'

原理说明:

  • tr ' ' '\n':把空格分隔的版本号转换成每行一个,方便awk逐行处理
  • -F.:把版本号按小数点拆分成3部分($1=主版本,$2=子版本,$3=次版本)
  • 用key作为分组标识,max[key]存储该组的最大次版本号
  • END块遍历所有分组,拼接成完整的最高版本号输出

方案二:用版本排序+去重

如果你的系统支持sort -V(版本号排序,大部分Linux发行版都支持),可以用排序+去重的思路:

curl -v --silent https://website.com.rss 2>&1 | awk -F '<title>|</title>' '{print $2}' | grep "^1\.[0-9][0-9]\." | tr ' ' '\n' | sort -Vr | awk -F. '
{
    key = $1 "." $2
    # 如果该分组还没输出过,就打印当前行并标记为已输出
    if (!seen[key]++) {
        print
    }
}'

原理说明:

  • sort -Vr:按版本号降序排列,这样每个子版本的最高次版本会排在最前面
  • seen[key]++:用数组记录每个分组是否已经输出过,第一次遇到的就是该组的最高版本,直接打印即可

这两种方法都能得到你想要的结果:1.10.3 1.11.4(顺序可能略有不同,但都是正确的最高版本)。如果需要按版本号升序输出,方案一可以在END块里加个排序,方案二把sort -Vr改成sort -V再反向处理就行~

内容的提问来源于stack exchange,提问作者DanTdd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:10