我知道已经有很多不同的线程像这样,但我找不到任何东西似乎可以很好地解释我正在尝试做的事情。
基本上我想要一个shell脚本,它只逐行遍历一个文本文件,并搜索单词“Error”或“Exception”。每当遇到这些单词时,它都会记录行号,以便我以后可以在一封包含问题行的电子邮件中删除文本文件。
我看过很多解释如何逐行遍历文本文件的东西,但我不明白如何在该行上运行正则表达式,因为我不确定如何使用正则表达式使用shell脚本以及每行存储的变量...
如果有人能为我澄清这些事情,我将不胜感激。
您需要研究使用 grep 命令。有了它,您可以搜索特定的字符串,输出行号和行本身,并做更多的事情。
这是一个站点的链接,其中包含使用该命令的实际示例: http ://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/
您可能对文章中的第 15 点特别感兴趣。
有许多工具可以自动循环文件。我会建议一个简单的解决方案,例如:
grep -inE 'error|exception' logfile > /tmp/logSearch.$$
if [[ -s /tmp/logSearch.$$ ]] ;then
mailx -s "errors in Log" < /tmp/logSearch.$$
fi
/bin/rm /tmp/logSearch.$$
用于man grep
了解我提供的选项。
来自`man bash
-s file
True if file exists and has a size greater than zero.
我希望这有帮助。