grep命令非常强大。它可以帮助用户在庞大的数据流或文件中匹配条件并输出相关行
--help选项获得帮助信息。
grep指令如果发现某文件的内容符合所指定的模板样式,默认grep指令会把含有模板样式的那行显示出来。若不指定任何文件名,或者给与的文件名为“-”,则grep紫惠玲会从标准输入设备读取数据。
相关命令: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”的行,并输出符合条件内容的前后两行
如图,使用-C选项,对比输出结果,-C选项输出内容多2行。
例3:使用-v反向查找,过滤掉exit字符串
grep "rh" /etc/ssh/sshd_config |grep -v exit
如图使用了-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