3

我正在尝试从日志文件中匹配包含“”的文本。但它不匹配。我理解“ ”对 TCL/Expect 有着特殊的意义。

因此我尝试了以下方法,但没有运气。

expect -ex {
            "lp -c -demail -ot\\\"firstname_surname@gmail.com\\\" /usr/local/spool/pf"
            {
               incr logged
               send_user "\r\n LOGGED #4, $logged \r\n"
            }
            timeout

我尝试使用 \、\ 和 \\ 但还没有运气。

任何人都可以帮助,请..

我的日志文件包含以下行,

执行 [lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf/context/ABC001-1209236.mime]

我需要匹配那条线。

4

3 回答 3

2

使用{}引号,类似于 shell 的单引号。Tcl 对换行也很敏感,所以你必须把一个块的左大括号放在前一行

expect {
    {lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf} {
       incr logged
       send_user "\r\n LOGGED #4, $logged \r\n"
     }
     timeout
}
于 2012-06-14T10:31:36.013 回答
1

不过,我不得不使用 *,临时修复。但是,如果有人能告诉我如何匹配文本中的“”,那就太好了。

我的临时解决办法是,

expect {
         "lp -c -demail -ot*/usr/local/spool/printform" {     
       }
}
于 2012-06-14T04:11:22.327 回答
1

如果您要精确匹配某些内容,只需将字符串括在{大括号}中即可。但是,您的代码也有另一个问题:通过放置-ex外部,您告诉expect将整个批次(包括您的响应代码!)作为字符串匹配。如果那是你想要的,我会很吃惊的!在块内移动标志(这expect仅适用于 Expect 和相关命令)并使用您正在寻找的文字字符串,而不是尝试双重猜测反斜杠的数量。你应该得到这样的东西:

expect {
    -ex {exec [lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf/context/ABC001-1209236.mime]} {
        incr logged
        send_user "\r\n LOGGED #4, $logged \r\n"
    }
    timeout
}
于 2012-06-14T10:46:20.607 回答