如何在期望脚本中仅将匹配行发送到标准输出

how to send to stdout in expect script only the matching lines

我有这个简单的 expect 脚本,它发送一个命令并等待响应,只有部分行匹配。

#!/usr/bin/expect -f
log_user 0

send "user --all\r"
expect {
 timeout { send_user "\nTimeout during command\n"; exp_continue }
 -re "OK  OK  OK  STARTED" { send_user "$expect_out(0,string)\n"; append dbscntl $expect_out(buffer); exp_continue }
 -re "Succeess!" { exp_continue }
 -re ">"
}
exit 0

我如何在正则表达式行中 send_out 匹配正则表达式 "OK OK OK STARTED".

的整行

在我的代码中 send_user "$expect_out(0,string)\n"; 只给我匹配的正则表达式 "OK OK OK STARTED" 而不是整行。

与正则表达式匹配的行示例:

0  Running       site1  OK  OK  OK  STARTED
1  Panding       site1  OK  OK  OK  STARTED
2  Running       site1  OK  OK  -   STARTED
3  Stopped       site1  -   OK  OK  STARTED

现在我会得到:

OK  OK  OK  STARTED
OK  OK  OK  STARTED

但是我会漏掉第二栏的信息

所以,我想要这样的东西:

0  Running       site1  OK  OK  OK  STARTED
1  Panding       site1  OK  OK  OK  STARTED

谢谢!

在建议和一些尝试之后,我发现这对我的情况有效 -re "(?n)^DSG.*OK OK OK STARTED(.*)" { send_user "$expect_out(0,string)\n"; append dbscntl $expect_out(buffer); exp_continue }

基本上,我有两个问题:

  1. 正则表达式不适用于 \m 和 \s
  2. send_user 需要用“”
  3. 将 $expect_out(0,string) 括起来