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

标签 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

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

最佳答案

您只是缺少 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

关于Expect 脚本中的正则表达式仅传递第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780471/

相关文章:

linux - mke2fs 命令选项

Bash 使用 codegangsta cli 框架自动完成 [https ://github. com/codegangsta/cli]

Kotlin 的 when 语句中的正则表达式或通配符?

linux - 我该如何杀死这个 bash 脚本?

mysql - 如何获取除括号中的所有匹配词?正则表达式/Mysql

c++ - c 从 uint64 到 float64_IEEE 的转换?

python - 将文件夹中的文件批处理为 Python 脚本参数

bash - 如果连接超时、ip、端口不存在或不使用 ssh 和 sshd 配置文件进行响应,我该如何退出、停止、终止 autossh?

regex - **粗体文本**的BBcode正则表达式

c# - 在 C# 中使用 Regex 比较两个不同的文件夹