grep是Linux中最常用的”文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客。其实,除了grep命令,其实还有egrep命令,还有fgrep命令(fast grep),它们有各自的特点。
grep:支持基本正则表达式 egrep:支持扩展正则表达式,相当于grep -E
fgrep:不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高。
为了方便以后回顾,将grep的常用选项总结如下:
| –color=auto 或者 –color: | 表示对匹配到的文本着色显示(centeros7 以上默认有此功能,该参数可省略) |
| -i | 在搜索的时候忽略大小写 |
| -n | 显示结果所在行号 |
| -c | 统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 |
| -o | 只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 |
| -v | 输出不带关键字的行(反向查询,反向匹配) |
| -w | 匹配整个单词,如果是字符串中包含这个单词,则不作匹配 |
| -Ax | 在输出的时候包含结果所在行之后的指定行数,这里指之后的x行 |
| -Bx | 在输出的时候包含结果所在行之前的指定行数,这里指之前的x行 |
| -Cx | 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行 |
| -e | 使用”-e”选项可以同时匹配多个目标,多个目标之间存在”或”关系,即匹配其中的任意一个都算作匹配成功 |
| -q | 静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到 |
| -P | 表示使用兼容perl的正则引擎。 |
| -E | 使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep |
举例:
以网络配置文件为例:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens32" UUID="9f2dc0ed-5691-4925-8330-ff574f98b11f" DEVICE="ens32" ONBOOT="yes" IPADDR="10.X.X.XXX" PREFIX="24" GATEWAY="10.X.X.1" DNS1="114.114.114.114" IPV6_PRIVACY="no"
如果上述代码改为:grep "ipaddr" /etc/sysconfig/network-scripts/ifcfg-ens32 则过滤不到想要的数据;可以加 -i 选项则不区分大小写,如下:
-n 参数显示所在行号
-c 匹配到的总行数
-o 只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v 输出不带关键字的行(反向查询,反向匹配)
-w 匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax 在输出的时候包含结果所在行之后的指定行数,这里指之后的x行 -A ->after
-Bx 在输出的时候包含结果所在行之前的指定行数,这里指之前的x行 -B->before
-Cx 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行 -C->上下文
-e 使用”-e”选项可以同时匹配多个目标,多个目标之间存在”或”关系,即匹配其中的任意一个都算作匹配成功
-q 静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到



