使用grep排除一个或多个字符串

grep命令应该是我们分析过滤常用的命令,某些情况下,我们需要排除某些条件
比如我要看日志中所有 GET请求,但 不要GET /image 这个目录的请求。
那我们这个grep怎么写?

思路:

当 grep 所有GET,然后在排除 GET /image 的请求。

这时我们就用到了 -v 选项,我么来看 v 的说明 :反转匹配

未分类

那么 grep 就这么写:

grep 'GET' nginx.log | grep -v 'GET /image'

如果还要排除 GET /js 那?

有同学可能会这么写:

grep 'GET' nginx.log | grep -v 'GET /image' | grep 'GET /js'

如果有多个排除,这样写就显得很啰嗦,而且有多个的话,效率就会降低。

我们看看grep的用法:

grep [OPTIONS] PATTERN [FILE...]

可以看到 是可以写正则表达式的

那上面的就可以这么写:

grep 'GET' nginx.log | grep -v 'GET /image|GET /js|'