期望正则表达式匹配一切或不匹配



从以下输出

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)可能是它表现不同的原因

最新更新