根据 grep 结果发送电子邮件

根据 grep 结果发送电子邮件

我在用着Web注入(CLI 而非 GUI)来测试在线 Web 服务。我原本打算找第三方,直到我发现了这颗小宝石,并意识到我可以节省什么……

我想要完成的是 grep WebInject (Perl 脚本) 的结果。如果它找到一个模式,则将结果通过管道发送到邮件。我是这方面的新手,不太清楚如何编写评估结果并将其发送到邮件的逻辑。

这是我目前所拥有的:

$perl webinject.pl | grep ‘测试用例失败’

我只想在 grep 找到匹配项时发送电子邮件,否则不应发送电子邮件。我想使用 cron 将其设置为以 10 或 15 分钟的间隔运行。

附注:grep 是否能够从匹配模式中抓取前导字符和尾随字符?

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

非常感谢!

答案1

看看这个答案根据 grep 结果进行 echo
这几乎是一样的,选择更符合您需要的答案,然后抑制 echo No 部分,并通过电子邮件命令替换 echo yes 部分

对于前导和尾随字符,您可以使用 -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 [email protected]
fi

答案2

这是一个可以工作的一行程序:

perl webinject.pl | grep 'TEST CASE FAILED' 2>&1 > /tmp/grep.log && /usr/bin/mail -s "grep found something" [email protected] < /tmp/grep.log

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

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

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

您还可以将此信息输出到系统日志。请参阅更好地记录 cronjobs?将 cron 输出发送到 syslog?

相关内容