grep命令非常强大。它可以帮助用户在庞大的数据流或文件中匹配条件并输出相关行

--help选项获得帮助信息。

grep Linux命令 linux | grep命令详解_运维

grep指令如果发现某文件的内容符合所指定的模板样式,默认grep指令会把含有模板样式的那行显示出来。若不指定任何文件名,或者给与的文件名为“-”,则grep紫惠玲会从标准输入设备读取数据。 

grep Linux命令 linux | grep命令详解_linux_02

相关命令:egrep,fgrep,rgrep

选项

选项说明

-A

输出包含匹配到的行之后的若干行数据(A选项后需要跟数字,代表多少行)

-a

不要忽略二进制的数据,如果grep找到符合模板样式的内容,但该文件的数据是二进制格式,使用本参数可强制显示内容。否则会只通知有符合条件内容,但不显示内容。

-B

输出包含匹配到的行之前的若干行数据(B选项后需要跟数字,代表多少行)

-b

在显示符合模板样式的那一行之前,标示处改行第一个字符的位编号。编码数从文件的第一字符算起,亦即每个文件的第一个字符,其位编号为1.

-C

输出包含匹配到的行之前和之后的若干行数据(C选项后需要跟数字,代表多少行)

-c

计算符合模板样式的行数,使用本参数将不显示符合条件的行的内容,而会显示每个文件里共有几行符合模板样式。

-d

当指定要查找的是目录而非文件,必须使用这个选项参数。-d选项有三个动作可以设置:read、recurse和skip。默认值是read,表示grep指令会把目录视同一般文件搜索字串。recurse是递归处理,表示该目录下的所有文件及子目录一并处理。skip则是略过该目录不处理。

-E

相当于执行egrep,将模板样式视为眼神的普同表示法来使用

-e

指定字符串作为需找文件内容的模板样式。这和直接指定模板并无不同,但对于以“-”符号为首的字符串,可以有效避免和参数混淆,避免导致grep指令发生错误

-f

指定模板文件,其内涵有一个或多个模板样式,让grep查找符合模板条件的文件内容,格式为每行一个模板样式。一个空的模板文件等于没有指定模板样式。

-F

相当于执行fgrep。将模板样式视为固定字符串的列表,两两之间以新增行控制字符分割,任何一个字符串符合条件即可。

-G

将模板样式视为普通的表示发来使用。此为默认值。

-h

在显示符合模板样式的那一行之前,不标示所属的文件名。

-H

在显示符合模板样式的那一行之前,标示所属的文件名,此为默认值。

-i

忽略大小写差别,包括模板养殖和指定要查找的文件名。

-l

列出文件内容符合指定的模板样式的文件名。

-L

列出文件内容不符合指定的模板样式的文件名。

-n

在显示符合模板样式的那一行之前,标示出改行的行数编号。

-q

不显示任何信息。

-r

与-d recurse 效果相同

-s

不显示错误信息。

-V

输出版本号

-v

反向查找,输出结果排除符合本选项的内容

-w

只显示全词符合的行。如样式模板设置为“email”,使用本选项参数后,内容“email”符合条件,但“myemail”不符合条件。

-x

只显示全行符合的行。

-y

与-i选项相同。

 例1:所搜/etc/ssh/sshd_config文件中包含“rh”的行

grep "rh" /etc/ssh/sshd_config

例2:所搜/etc/ssh/sshd_config文件中包含“rh”的行,并输出符合条件内容的前后两行

grep Linux命令 linux | grep命令详解_运维_03

 如图,使用-C选项,对比输出结果,-C选项输出内容多2行。

例3:使用-v反向查找,过滤掉exit字符串

grep "rh" /etc/ssh/sshd_config |grep -v exit

grep Linux命令 linux | grep命令详解_运维_04

 如图使用了-v选项,可以看到含有exit的行被过滤了。

例4:在当前目录下,对所有后缀为txt的文件搜索set字符串

grep seti *.txt

例5:在当前目录下,包含子目录,对所有后缀为txt的文件搜索set字符串

grep -i seti *.txt

或:

grep -d recurse  seti *.txt

例6:精准匹配单词world

grep -w world *.txt

例7:使用模板文件进行搜索

模板文件mypartern包含两行内容如下:

alpha

beta

使用该文件进行匹配,将会获得符合这两个字串的行。

grep -f mypartern *.txt

例8:匹配完整行为“hello world!”的行

grep -x "hello world!" *.txt 

例9:统计alpha出现的次数

grep -c alpha *.txt

例10:寻找不包含“alpha”的文件,只列出文件名

grep -L alpha *.txt