4行反转grep搜索包含许多文件的目录

时间:2016-06-13 11:49:30

标签: linux shell grep

我在目录中有很多日志文件。在这些文件中,有很多行。其中一些行包含ERROR个字。

我正在使用grep ERROR abc.*从所有abc1,abc2,abc3等文件中获取错误行。

现在,我想避免使用4-5 ERROR行。

所以,我正在使用

grep ERROR abc* | grep -v 'str1\| str2'

这很好用。但是当我再插入1个字符串时,

grep ERROR abc* | grep -v 'str1\| str2\| str3

它不会受到影响。

我需要避免4-5个字符串..有人可以提出解决方案吗?

2 个答案:

答案 0 :(得分:2)

您正在使用多种搜索模式,即以正则表达式的方式。 grep中的-E支持扩展的正则表达式,如下面的man页面所示

   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern.  This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).  (-e is specified by POSIX.)

   -E, --extended-regexp
       Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

因此,您需要使用-E标记以及-v反向搜索

grep ERROR abc* | grep -Ev 'str1|str2|str3|str4|str5'

供您参考的用法示例: -

$ cat sample.txt
ID    F1    F2    F3    F4      ID    F1    F2    F3    F4
aa aa
bb    1    2    3    4  bb    1    2    3    4
cc    1    2    3    4  cc    1    2    3    4
dd    1    2    3    4  dd    1    2    3    4
xx xx

$ grep -vE "aa|xx|yy|F2|cc|dd" sample.txt
bb    1    2    3    4  bb    1    2    3    4

答案 1 :(得分:1)

您的示例应该有效,但您也可以使用

grep ERROR abc* | grep -e 'str1' -e 'str2' -e 'str3' -v