从以下输出
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"变成一个变量?
以下代码目前捕获"警告"中的所有内容。最多"答案:"
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 $中,那么就没有匹配。
答案 0 :(得分:0)
使用Cookie: 65251-403 EventID: 8900000000
^Cookie.*?$
您发表评论后[编辑]
您需要添加多行标记 - 请参阅此处:https://regex101.com/r/7XBeOF/1
如果你想在没有m
标志的情况下匹配相同的东西,你也可以这样做:Cookie.*?\n
。
看到它在这里工作: https://regex101.com/r/7XBeOF/2
答案 1 :(得分:0)
我设法完成我需要的方法是使用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)
从缓冲区获取输出文本,这是与之前的正则表达式进行比较的部分
part2
告诉系统将匹配的文本分配给名为part2的变量
安东尼的建议是正确的,但是期望$ expect_out(缓冲区)可能是它表现不同的原因