使用期望无法识别输出的Bash脚本

时间:2015-01-26 16:44:49

标签: regex bash expect

我试图编写一个期望脚本来杀死正在运行的进程并在脚本中生成下一个命令。我相信我的问题是脚本没有识别正确的输出,因此脚本会挂起它应该杀死进程的位置。

以下是我尝试匹配的确切输出

<Jan 26, 2015 8:38:05 AM PST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.> 

以下是我在期望脚本中的内容

expect {
             -re "<\[^>\]*> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>.*$" { system kill -TSTP [exp_pid]; system kill -CONT [exp_pid]; send_user "\r\r" }
            -re "<\[^>\]*> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>.*$" { system kill -TSTP [exp_pid]; system kill -CONT [exp_pid]; send_user "\r\r" }
            "<Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>.*$" { system kill -TSTP [exp_pid]; system kill -CONT [exp_pid]; send_user "\r\r" }
    }'

我使用正则表达式作为时间戳,这样我就可以匹配整行。

有关它为什么不与输出匹配的任何想法?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要在[]

之前删除反斜杠
<[^>]*>

-re "<[^>]*> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>.*$"

在正则表达式[^...]中称为否定字符类。 \[\]与文字[]字符匹配。