逐行扫描文本文件并使用Unix shell脚本读取每行内容

3
我知道已经有很多类似的帖子了,但是我找不到任何一个能够很好地解释我要做什么的。

基本上我想要一个shell脚本,它只需要逐行浏览文本文件,并搜索单词“Error”或“Exception”。每当它遇到这些单词时,它会记录行号,以便我稍后可以将文本文件发送到电子邮件中,包含有问题的行。

我看到了很多关于如何逐行循环读取文本文件的东西,但我不明白如何在该行上运行正则表达式,因为我不确定如何在shell脚本中使用正则表达式以及每行存储在哪个变量中...

如果有人可以为我澄清这些事情,我会非常感激。

2个回答

0

你知道这个程序只会运行到第一个错误吗?因为在一个文件中可能会有数十个错误或异常。 - user707053
这可以运行整个文件或一组文件。它是基于Unix系统中最通用的命令。请查看此命令的man页面以获取更多详细信息(键入“man grep”)。如果您发现我的答案有帮助,请考虑投票支持。干杯 - Nickoli Roussakov
第15行实际上非常有用,但我不知道如何记录这些行。它似乎只是将它们回显到终端,但我不知道该怎么做。 - user707053
只需使用“>”将输出重定向到文件即可。例如:grep ... > myfile.txt - Nickoli Roussakov

0

有许多工具可以自动循环遍历文件,我建议使用简单的解决方案,例如:

 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. 

希望这能有所帮助。


这很有帮助,但我有点困惑。这是复制具有“error”或“exception”的整行并将其扔进临时文件,对吗?我该如何将行号保留在数组中并通过电子邮件发送呢?因为具有错误或异常的行实际上并不包括所需的所有信息。下面的行才是真正的错误详细信息所在。 - user707053
其实我很蠢。我只需要在那里加上“-n”,它就会完全按照我的意愿执行... 我想是这样的吧? - user707053
@sil40:我很高兴这有所帮助。-n会打印行号,所以你可以得到需要的信息和一些其他信息。此外,一些grep支持context参数,意思是显示匹配行周围的N行。检查你的man grep看看你的版本是否支持。如果不清楚,但你发现有一个context选项,只需在一个文件上测试它,看看会发生什么;尝试将其设置为4作为周围上下文的值。祝好运。 - shellter
@sil40:嗯,是的,我也搞错了!最初发布的不是 -l,而是带有行号的 -n。我已经编辑了我的答案。看看你的 grep 是否有 -A 4(或任何有用的数字)来获取后面的上下文。祝好运。 - shellter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接