【问题标题】:expect regex to search a complete line or text期望正则表达式搜索完整的行或文本
【发布时间】:2017-12-19 05:03:50
【问题描述】:

我的 expect_output(buffer) 如下多行。

status QM1
QM(QM1)                                  Status(Running)
CPU:                                     0.02%
Memory:                                  106MB
Queue manager file system:               391MB used, 47.3GB allocated 
[1%]
HA role:                                 Primary
HA status:                               Normal
HA control:                              Enabled
HA preferred location:                   Here
mqa(mqcli)#

尝试了多个正则表达式选项,但我一直得到 0,因为不匹配。

regexp /^.*\b(Running)\b.*$ $qmgrstat类似,获取“HA Status”的值。

什么是正确的正则表达式语法。

【问题讨论】:

  • 引用here 但当我们有多行时不明白。
  • 你如何尝试做正则表达式?与R?有哪些选项?
  • 请注意,expect(以及它所构建的语言,Tcl)有细微的不同正则表达式语法:它不是 PCRE。 \b 表示退格字符,而不是单词边界:tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm

标签: regex expect


【解决方案1】:

不确定我是否理解。是否只想匹配HA status 的值?如果是,那么这个正则表达式会这样做:

HA status:\W*(.*)

【讨论】:

  • 我会在这里使用\s 而不是\W
【解决方案2】:

如果您想在“QM”状态为 Running 时捕获 HA 状态,您可以这样做

if {[string match {*Status(Running)*} $qmgrstat]} {
    regexp {HA status:\s+(\S+)} $qmgrstat -> status
}

【讨论】:

    【解决方案3】:

    您可以使用以下正则表达式来获取整个输出:

    status[^\v]*\vQM[^\v]*\vCPU:[^\v]*\vMemory:[^\v]*\vQueue manager file system:[^\v]*\vHA role:[^\v]*\vHA status:[^\v]*\vHA control:[^\v]*\vHA preferred location:[^\v]*\vmqa[^\v]*#\v
    

    如果您想要带有状态的完整文本行,请使用:[^\v]*Status\([^\v]*

    要获得具有 HA 状态的行,您可以使用:HA status:[^\v]*

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      相关资源
      最近更新 更多