我在目录中有很多日志文件。在这些文件中,有很多行。其中一些行包含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个字符串..有人可以提出解决方案吗?
答案 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