grep命令

1、作用:

Linux系统中grep命令是一种强大的文本搜索工具,它能使用多种选项及正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式打印,它的使用权限是所有用户。

2、语法:

grep [option...] [patterns] [file...]

可以有零个或多个选项参数,以及零个或多个文件参数。patterns参数包含一个或多个由|分隔的模式,当通过“-e patterns”或“-f file”选项给出模式时,将忽略该参数。当在shell命令中使用grep时,通常应该引用模式。

3、常用选项:

-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而搜寻的是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context

4、基本正则表达式

4.1匹配字符:
. :任意一个字符。
[abc] :表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。
对于一些常用的字符集,系统做了定义:
[A-Za-z] 等价于 [[:alpha:]]
[0-9] 等价于 [[:digit:]]
[A-Za-z0-9] 等价于 [[:alnum:]]
tab,space 等空白字符 [[:space:]]
[A-Z] 等价于 [[:upper:]]
[a-z] 等价于 [[:lower:]]
标点符号 [[:punct:]]

reg.png

5、常见使用示例

5.1 示例1

搜索日志文件中是否存在错误信息,假如错误信息的关键字是"error",可以使用如下命令

grep error test.log

error.png

5.2 示例2

如果搜索的字符串不包含空格则可以不需要引号,如果包含空格,则需要使用双引号或者单引号包起来。

error2.png

5.3 示例3

搜索目录下所有文件,包含子文件夹,加上-r参数即可

grep -r "xxxxxx" *

5.4 示例4

搭配其他命令一起使用,比如:搭配tailf命令实时搜索相关字符串,搭配ps命令搜索相关进程是否启动。

tailf xxx.log | grep "good"
ps -ef | grep "goodprocess"

5.5 示例5

搜索历史日志文件,但是历史日志文件被打包成gz文件了,全部解压出来再使用grep搜索就太麻烦了,这时可以使用zgrep。

zgrep -a "good" xxxx.tar.gz

5.6 示例6

搜索不固定的字符串,但是这些字符串有一定的规律,这时可以使用正则表达式。假如日志中的日期格式为1009-123030,想要搜索12点到13点的日志,则可使用如下命令

grep "1009-1[2-3][[:digit:]]\{4\}" test.log
grep -E "1009-1[2-3][[:digit:]]{4}" test.log
egrep "1009-1[2-3][[:digit:]]{4}" test.log
这3种方式都可以

rr.png

5.7 示例7

如果搜出来的日志比较多,全部打印出来无法阅读,那么可以将其存到一个文件中。

egrep "1009-1[2-3][[:digit:]]{4}" test.log > 1213.log

5.8 示例8

同时搜索多个关键字,使用|分割关键字,如下多个关键字是或的关系

grep "hund\|world\|China" test.log
grep -E "hund|world|China" test.log
egrep "hund|world|China" test.log
这3种方式都可以

more.png

多个关键字与的关系,使用多个grep分别搜索,同一行包含所有关键字才会有结果。

grep hund test.log | grep world | grep China

adn.png

grep的功能是非常强大的,如上只是列举了几个工作中常用的功能,如果需要了解更多功能,可以参考官方文档