目前我有一个脚本,它从下面的菜单响应中提取行#号,该响应具有我对“SalVhugoV3”感兴趣的SNMP用户。
这是蓝色的菜单响应
选择SNMP用户: 1)cmssnmp 2)地图集 3)SalVhugoV3 输入选项(1-3):
脚本的这个工作部分查找包含“SalVhugoV3”的字符串,并删除选项#3,因为它是用户正在寻找的选项。然后发送“3”作为“输入选择”提示的snmpuserChoice。
expect -re ".*\\(.*\\):" {
append rawOut $expect_out(buffer)
regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
exp_send -- "$snmpUserChoice\r"
}
我正在尝试做同样的事情,但是这个扩展的响应,因为你可以看到我在这种情况下寻找的用户选项是选项“5”,因为它包含“SalVhugoV3”的结尾字符串。我相信这是需要改变的“regexp {。(([0-9]))[put $ V3USER]。)}”但我不知道如何修改它以便它获取选项“5”号码,以便可以通过“exp_send”发送。
选择要删除的SNMP连接: 1)连接到NMS:主机135.9.60.143,端口162,用户cmssnmp 2)连接到SAL:主机135.9.158.252,端口162,用户cmssnmp 3)连接到SAL:主机135.9.158.236,端口162,用户cmssnmp 4)连接到NMS:主机135.105.6.67,端口162,用户地图集 5)连接到SAL:主机135.60.25.147,端口162,用户SalVhugoV3 输入选项(1-5):
expect -re ".*\\(.*\\):" {
append rawOut $expect_out(buffer)
regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
exp_send -- "$snmpUserChoice\r"
}
答案 0 :(得分:0)
regexp "((\[0-9\])\\)\[^\\)\]*$V3USER)" $expect_out(buffer) cmdOut snmpUser snmpUserChoice
对于V3USER = atlas,它会给出:
snmpUser ='4)与NMS的连接:主机135.105.6.67,端口162,用户atlas'
snmpUserChoice = '4'
为了更好的可读性并避免转义:
set gen_expr {([0-9])\)[^\)]*}
set spec_expr "($choice_expr$V3USER)"
regexp $spec_expr $expect_out(buffer) cmdOut snmpUser snmpUserChoice
顺便说一句:术语{ ... [puts $V3USER] }
让我感到困惑。在括号中没有转义,所以这只是被解释为正则表达式,因此期望其中一个字符'p','u','t','s','',$'等...