根据grep结果发送电子邮件

我正在使用WebInject (CLI而不是GUI)来testing在线Web服务。 我打算和第三方一起去,直到我find了这个小gem,并意识到我可以拯救…

我想完成的是grep WebInject(Perl脚本)的结果。 如果它find一个模式,然后pipe结果给邮件。 我是新手,不太清楚如何编写评估结果并将其发送到邮件的逻辑。

这是我迄今为止:

$ perl webinject.pl | grep'TEST CASE FAILED'

如果grep发现匹配,我只想发送一封邮件,否则不应该发送邮件。 我想用cron设置它以10或15分钟的间隔运行。

作为一个侧面说明,是grep能够抓住匹配模式的前导和尾随字符?

更新1:找出前导线和尾随线(-A#-B#)

非常感谢!

基于grep结果来看看这个答案echo
这几乎是相同的,采取答案,更好地适合您的需要,然后抑制回声没有部分,并通过电子邮件命令的回声是部分

调整前导字符和尾随字符可以使用-C选项或-A和-B(-C是-AX -BX)

-A NUM, --after-context=NUM Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of matches. -B NUM, --before-context=NUM Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches. -C NUM, --context=NUM Print NUM lines of output context. Places a line containing -- between contiguous groups of matches. 

如果我明白你想要做什么,你可能会喜欢以下例子

 perl webinject.pl > /tmp/webinject_result.txt if grep --quiet 'TEST CASE FAILED' /tmp/webinject_result.txt; then grep -B 20 -B 2 'TEST CASE FAILED' /tmp/webinject_result.txt | mail someone@domain.tld fi 

这是一个应该工作的单线程:

 perl webinject.pl | grep 'TEST CASE FAILED' 2>&1 > /tmp/grep.log && /usr/bin/mail -s "grep found something" root@example.org < /tmp/grep.log 

这是一个更通用的情况,有多个命令:

 { COMMAND1 ; COMMAND2 |grep 'your string here' ; } 2>&1 > /tmp/logfile && /usr/bin/mail -s "$SUBJECT" $MAILTO < /tmp/logfile 

&&后的代码只有在花括号内的命令find匹配时才会激活(返回码为零,表示成功)。 我使用2>&1来确保我不会错过任何输出。

您也可以将这些信息输出到系统日志。 请参阅更好地loggingcronjobs? 发送cron输出到syslog?