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表示没有匹配到