Tcl如何对文本中指定前缀的版本行排序并提取最后一项
Tcl实现版本号筛选排序方案
完整可运行代码
proc get_latest_aa_version {input_text} { # 拆分输入文本为行列表 set lines [split $input_text "\n"] set matched_lines [list] foreach line $lines { # 匹配以#AA_VERSION =开头的行,正则中\s*兼容行首带空格/制表符的场景,不需要可删除 if {[regexp {^\s*#AA_VERSION =} $line]} { lappend matched_lines $line } } # 无匹配项直接返回空值 if {[llength $matched_lines] == 0} { return "" } # 字典排序:按版本号中的数字自然排序,避免ASCII排序导致d138排在d82前面的问题 set sorted_lines [lsort -dictionary $matched_lines] # 取排序后最后一项返回 return [lindex $sorted_lines end] }
调用测试示例
# 你的示例输入文本 set test_text {#AA_VERSION = Aa/10.10-d87_1 #AA_VERSION = Aa/10.10-d887_1 #AA_VERSION = Aa/10.10-d138_1 #AA_VERSION = Aa/10.10-d82_1} # 调用函数输出结果 puts [get_latest_aa_version $test_text]
运行输出结果:
#AA_VERSION = Aa/10.10-d887_1
注意事项
- 如果需要严格匹配行首无任何空白的
#AA_VERSION =开头行,可将正则改为{^#AA_VERSION =} - 字典排序规则会优先匹配版本前缀、再按数字大小排序,符合常规版本号排序逻辑
内容的提问来源于stack exchange,提问作者tongtong
相关产品推荐
相关产品推荐

