Expect脚本中的正则表达式仅传递第一个匹配项

时间:2014-05-21 10:25:01

标签: regex linux bash centos expect

拥有这个非常简单的脚本:

#!/usr/bin/expect -f


set values "#host=CE101 #host=CE102"
set found [regexp {[A-Z]{1,2}\d{2,3}} $values CE CE1]
if {$found == 1} {
    puts "px is $CE"
    puts "vpx is $CE1"
} else {
   puts "\nfailed to match anything from\r\n$values"
}

puts $found

所以我的问题是regexp只将第一个找到的结果传递给变量而第二个没有被传递。我确信这是问题,因为添加-all到regexp正在返回2所以我确信它匹配两个值,但我不知道它为什么只传递第一个匹配的,我也删除了"#host=CE101,它成功地匹配了CE102。

1 个答案:

答案 0 :(得分:1)

您只是遗漏了regexp

的几个选项
set values "#host=CE101 #host=CE102"
set re {[A-Z]{1,2}\d{2,3}}
set hosts [regexp -all -inline $re $values]
if {[llength $hosts] > 0} {
    foreach host $hosts {puts "found $host"}
} else {
    puts "no matches"
}
found CE101
found CE102