期望正则表达式匹配所有或不

时间:2016-10-07 01:14:27

标签: regex bash expect

从以下输出

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 $中,那么就没有匹配。

2 个答案:

答案 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(缓冲区)可能是它表现不同的原因