grep命令用于在文本中查找指定的字符串。可以把grep理解为字符查找工具,grep是一个可以利用正则表达式进行全局搜索的工具,并将搜索出来的行打印出来。
grep与正则结合在一起,功能会更加强大。
—color:高亮显示搜索文本.使用 —color 和使用 —color=auto的效果相同。在centos7中,系统默认为grep命令配置了别名,不用显式指定 —color 选项。默认高亮显示被匹配到的关键字,可以通过alais命令查看别名:
-i:索时不区分大小写
-n:表示显示打印出的行在文本中的行号

-c:统计符合的字符出现次数
-o:把每个匹配到的关键字都单独在一行内进行输出

  1. # 搜索grep文件中的“Bootstrap”字符串。会查询全部
  2. grep "Bootstrap" grep
  3. # 不区分大小写搜索字符串-i
  4. grep -i 'channel' grep
  5. # 使用-n显示字符串所在行号
  6. grep -i -n 'channel' grep
  7. # 高亮显示查找的文本
  8. grep -i -n --color 'channel' grep
  9. # 统计文本出现次数
  10. grep -i -c 'channel' grep
  11. # 只打印搜索的关键字
  12. grep -i -o 'channel' grep

-B:显示符合条件的行之前的行,B可以理解为before之意
-A:表示显示符合条件行的同时,还要显示之后的行。after之意
-C:可以理解为 -A 和 -B 的结合。-C表示显示符合条件的行的同时,还要显示前后的行。context(上下文之意)

姓名:小小
年龄:18
评分:98

姓名:空空
年龄:32
评分:99

姓名:熊猫人
年龄:18
评价:95

# 只能匹配到年龄,不知道姓名
grep "年龄:18" grep
年龄:18
年龄:18

# 使用-B1参数,显示搜索行的前一行,-B5显示搜索行的前5行。-B之后必须跟数字
grep -B1 "年龄:18" grep
姓名:小小
年龄:18
--
姓名:熊猫人
年龄:18

# 使用-A1参数,显示匹配行的后一行
grep -B1 -A1 "年龄:18" grep
姓名:小小
年龄:18
评分:98
--
姓名:熊猫人
年龄:18
评价:95

-w:精准匹配字符。只有搜索的字符作为一个单独的单词而存在的时候,才会被匹配到。word之意
-v:反向查找。比如查找不包含某些字符串的行,用到 -v 选项
-e:同时匹配多个目标,多个目标之间存在或联系。即匹配其中任意一个都算匹配成功。
-q:用grep判断文本中是否存在某个字符串。只关心有没有匹配到,而不关心匹配到的内容。静默模式下grep不会输出任何信息。无论是否匹配到指定的字符串,都不会输出任何信息

 grep -w "Thread" grep
 grep -v "Thread" grep

 # 匹配Thread或util任意一个字符
 grep --color -w -e "Thread" -w -e "util" grep

# 配合 echo $? 命令,查看命令的执行状态。如果返回值为0,证明上一条grep命令匹配到了指定的字符串。如果返回为1,证明上一条grep命令没有匹配到指定的字符串
grep -q "Thread" grep
echo $?

grep的正则表达式

grep : 支持基本正则表达式
egrep : 支持扩展正则表达式,相当于grep -E
fgrep : 不支持正则表达式,只能匹配写死的字符串。但是速度快,效率高,fastgrep
-E:在使用了 -E 选项时,grep才支持扩展正则表达式,不适用 -E 选项时,grep默认只支持基本正则表达式。
-P:使用 -P 选项,指明使用perl兼容的正则表达式

总结

grep的常用选项总结如下:
—color=auto或者—color:对匹配的文本着色显示
-i : 搜索的时候忽略大小写
-n : 显示结果所在行号
-c : 统计匹配到的行数,注意时匹配到的总行数,不是匹配到的次数
-o : 只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v : 输出不带关键字的行(反向查询,反向匹配)
-w : 匹配整个单词,如果是字符串中包含这个单词,则不做匹配
-Ax : 在输出的时候包含结果所在行之后的指定行数,这里指之后的x行
-Bx : 在输出的时候包含结果所在行之前的指定行数,这里指之后的前行
-Cx : 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行
-e : 实现多个选项的匹配,逻辑 or 关系
-q : 静默模式,不输出任何信息。然后使用echo $?查看是否匹配到,0表示匹配到,1表示没有匹配到。
-P : 表示使用兼容perl的正则引擎
-E : 使用扩展正则表达式,而不是基本正则表达式,相对于使用egrep