如何在期望脚本中仅将匹配行发送到标准输出
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 }
。
基本上,我有两个问题:
- 正则表达式不适用于 \m 和 \s
- send_user 需要用“”
将 $expect_out(0,string) 括起来
我有这个简单的 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 }
。
基本上,我有两个问题:
- 正则表达式不适用于 \m 和 \s
- send_user 需要用“” 将 $expect_out(0,string) 括起来