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

如何使用TCL在多个文本中查找最新版本与上一版本的对应行

Tcl版本提取实现方案

核心逻辑

不用额外记录行号,逐行读取文件时始终缓存上一行的内容,当匹配到无前缀的最新version行时,此时缓存的上一行就是对应的最近历史版本,直接提取即可,逻辑简单且效率很高。

完整可运行代码

# 提前打开输出文件,避免循环内反复打开浪费IO性能,w表示先清空原有内容再写入
set output_fp [open "tool_version" w]

foreach fileName [glob /aaatools/N*/release/version] {
    set fp [open $fileName "r"]
    set last_line ""
    set current_version ""
    set prev_version ""

    while {[gets $fp data] >= 0} {
        # 先判断当前行是不是无前缀的最新版本行
        if {[regexp {^version\s*=\s*(\d+)} $data -> current_version]} {
            # 匹配成功的话,上一行就是最近的历史版本,提取版本号
            if {[regexp {^#version\s*=\s*(\d+)} $last_line -> prev_version]} {
                # 按要求拼接内容写入输出文件,格式可根据需要调整
                puts $output_fp "$fileName $current_version $prev_version"
            }
            # 匹配到最新版本后可以直接跳出循环,不需要读后面的内容(如果有的话)
            break
        }
        # 没匹配到最新版本就更新上一行缓存
        set last_line $data
    }
    close $fp
}

# 关闭输出文件句柄
close $output_fp

关键说明

  • 正则^version\s*=\s*(\d+):^匹配行首,\s*兼容等号两边可能存在的空格,分组(\d+)提取纯数字版本号,如果你版本号有字母可以改成([A-Za-z0-9_]+)
  • 如果你的文件里最新版本行不一定是最后一行,只需要把break去掉,代码也能正常匹配所有最新版本行
  • 如果存在没有历史版本的异常情况(比如第一行就是无前缀的version),可以自行加判断跳过避免空内容写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04