期望中的正则表达式

约翰

我刚开始学习期望脚本,我一直在尝试从输出中提取以下内容:

core.4046140998.01.10.133211

使用期望的脚本使用以下命令。有人可以告诉我我要去哪里哪里吗?我想将整个字符串即ie(core.4046140998.01.10.133211 *)存储在变量中并对其执行一些操作。

expect -re {^(core)\.*} {puts $expect_out(0,string)}

我是否需要导入任何软件包才能使它正常工作?

格伦·杰克曼

由于这是预料之中的,因此“ core”可能会出现在一行的开头,而不是出现在输入字符串的开头展示:

$ expect
expect1.1> spawn sh
spawn sh
8043
expect1.2> send "echo core.1234\r"
expect1.3> exp_internal 1
expect1.4> expect -re {^core.*}
Gate keeper glob pattern for '^core.*' is 'core*'. Activating booster.

expect: does "" (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=no
sh-4.3$ echo core.1234
core.1234
sh-4.3$ 
expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=yes re=no
expect: timed out
expect1.5> expect -re {(?n)^core.*}
Gate keeper glob pattern for '(?n)^core.*' is 'core*'. Activating booster.

expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "(?n)^core.*"? Gate "core*"? gate=yes re=yes
expect: set expect_out(0,string) "core.1234\r"
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "sh-4.3$ echo core.1234\r\ncore.1234\r"
expect1.6> puts ">>>$expect_out(0,string)<<<"
<<<core.1234

注意事项:

  • 预期-re {^core.*}不符。我们看到“超时”消息
  • 请注意我们正在尝试匹配的内容:

    expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=yes re=no
    # ............^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    它以我发送的命令开头,因此使用“常规”锚点将不起作用

  • 我期望的下一件事是-re {(?n)^core.*}确实匹配。

    • (?n)是很少使用的Tcl regex指令,它告诉regex引擎我们要“对换行敏感的”匹配。
    • 换行敏感匹配表示.不匹配换行,并且(此处更相关)^可以在多行字符串中的换行之后立即匹配(与相似$
  • 请注意,我的puts命令的输出看起来很奇怪。那是由于末尾的回车$expect_out(0,string)注意这一点,并按string trim要求使用

这里的外卖课程是:

  • 提取命令的输出可能很困难,因为提示和发送的命令可能会妨碍您。
  • 使用Expect调试来查看为什么您的模式不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章