我在用着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?