我有一个带有期望脚本的问题。我想在命令输出为“0”时捕获,并与其他数字或链条区分,如“000”或“100”
我的代码是:
#!/usr/bin/expect -f
set timeout 3
spawn bash send "echo 0\n"
expect {
-regexp {^0$} { send_user "\nzero\n" }
-re {\d+} { send_user "\number\n"}
}
send "exit\n"
我有以下回应:
spawn bash
echo 0
number
但以下正则表达式不起作用:
-regexp {^0$} { send_user "\nzero\n" }
如果我将其更改为:
-regexp {0} { send_user "\nzero\n" }
有效,但它也会捕获“00”“10”“1000”等。
send "echo 100\n"
expect {
-regexp {0} { send_user "\nzero\n" }
-re {\d+} { send_user "\nnumber\n"}
}
结果:
spawn bash
echo 10
zero
我不知道我做错了什么,我没有在谷歌上找到任何帮助。我也搜索过这里解决的类似问题我无法对我的代码进行任何操作。
更新:
我尝试了修改后的代码:
#!/usr/bin/expect -f
set timeout 3
spawn bash
send "echo 0\n"
expect {
-regexp {\b0\b} { send_user "\nzero\n" }
-re {\d+} { send_user "\nnumber\n"}
}
send "exit\n"
但我仍然有这样的回应:
spawn bash
echo 0
number
更新2
我也试过这一行:
-regexp {"^0\n$"} { send_user "\nzero\n" }
但我仍然有相同的结果。
提前致谢
答案 0 :(得分:2)
我可以解决问题:
#!/usr/bin/expect -f
set timeout 3
spawn bash
send "echo 0\n"
expect -re "(\\d+)" {
set result $expect_out(1,string)
}
if { $result == 0 } {
send_user "\nzero\n";
} else {
send_user "\nnumber\n";
}
send "exit\n"
答案 1 :(得分:0)
尝试使用字边界:\b0\b
答案 2 :(得分:0)
快速浏览一下expect的文档:
但是,因为expect不是面向行的,所以这些字符匹配当前在期望匹配缓冲区中的数据的开头和结尾(而不是行)。
你的正则表达式应该考虑到你有换行的事实。
如果您的数据为0\n
,则可以使用"^0\n$"
。