Tcl已知行号如何打印整行内容并提取指定版本字段
问题原因
你当前用的正则{\d+}仅匹配连续数字串,匹配目标行时第一个命中的内容就是10,所以只会输出这个结果。
解决方案
你可以任选以下两种方式调整:
方法1:按固定格式分割(更简单,适合键 = 值的固定行结构)
# 先获取目标行完整内容 set target_line [lindex $lines $idx] # 按等号分割后取第二部分,修剪掉前后的空白字符即可拿到完整版本号 set version [string trim [lindex [split $target_line "="] 1]] # Tcl原生输出命令为puts,如果你用的环境支持print也可以保留原有输出写法 puts $version
方法2:正则匹配(适合需要精准校验版本格式的场景)
如果要通过正则匹配整段版本号,需要把正则规则覆盖版本号的完整格式:
set target_line [lindex $lines $idx] # 匹配等号后的所有非空白内容 regexp {=\s*(\S+)} $target_line -> version puts $version
如果需要更严格的格式校验,匹配Aa/10.10-d87_1这类规则的版本号,可以用:
regexp {=\s*([A-Za-z]+/\d+\.\d+-[a-zA-Z0-9]+_\d+)} $target_line -> version puts $version
内容的提问来源于stack exchange,提问作者tongtong
相关产品推荐
相关产品推荐

