从以下输出
user@machine ~]$ myScript
Warning: Permanently added '2.2.2.2' (RSA) to the list of known hosts.
Cookie: 65251-403 EventID: 8900000000
Answer:
如何将"Cookie: 65251-403 EventID: 8900000000"一行捕获到变量中?
下面的代码当前捕获从"Warning"到"Answer:"的所有内容
set [lindex $argv 0]
set [lindex $argv 0]
set timeout 20
spawn -noecho ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -l $user $ip
set chalStr "(Cookie)"
expect {
$chalStr {
set challengeString $expect_out(buffer)
puts "RegEx matched: $challengeString"
}
}
interact {
"ver" { send "sversion|more" }
}
如果我将表达式括在^Cookie$中,则没有匹配。
用^Cookie.*?$
捕获Cookie: 65251-403 EventID: 8900000000
[EDIT]在你的评论后
你需要添加多行标志-看看它在这里工作:https://regex101.com/r/7XBeOF/1
如果你想匹配相同的东西没有m
标志,你也可以这样做:Cookie.*?n
.
看到它在这里工作:https://regex101.com/r/7XBeOF/2
我设法完成我需要的方法是使用expect命令regexp:http://wiki.tcl.tk/989
通过这样做,我能够分割我需要的部分。例如:
regexp {d{5}-d{3}} $expect_out(buffer) part2
d{5}-d{3}
匹配5个数字(一个破折号和另外3个数字)
$expect_out(buffer)
从缓冲区中获取输出文本,这是与之前的regexp
part2
告诉系统将匹配的文本赋值给变量part2
Antoni的建议是正确的,但是在expect中$expect_out(buffer)可能是它表现不同的原因