一、grep简介

grep是Linux中最常用的”文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客

三个”剑客”的特长
grep 更适合单纯的查找或匹配文本
sed  更适合编辑匹配到的文本
awk  更适合格式化文本,对文本进行较复杂格式处理


grep家族
grep:支持基本正则表达式
egrep:支持扩展正则表达式,相当于grep -E
fgrep:不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高,fastgrep

二、grep参数

示例文件
# vim test1.txt

root ROOT Rootabroot
tom jerrytom Tom
123 56789

SElinux=disabled
#selinux firewalld
abc ABC .rootROOT
abcrootabcc
abcabc
babcabcabcbaaa abcbbb
aaaaa bbbbbb
tm ttm ttttttm


# vim test2.txt
姓名: tom
年龄: 18
爱好:唱跳

姓名: jerry
年龄: 20
爱好:rap

姓名: zhangsan
年龄: 22
爱好:篮球

搜索包含root字符串的行
# grep "root" test1.txt

-i:在搜索的时候忽略大小写
# grep -i "root" test1.txt

-n:显示结果所在行号
# grep -i -n "root" test1.txt

-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
# grep -i -n -c "root" test1.txt

-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
# grep -i -n -o "root" test1.txt

-v:输出不带关键字的行(反向查询,反向匹配)
# grep -v "root" test1.txt 

-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
# grep -w "root" test1.txt 

-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
# grep -A1 "年龄: 18" test2.txt 

-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
# grep -B1 "年龄: 18" test2.txt 


-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
# grep -C1 "年龄: 20" test2.txt 

-e:实现多个选项的匹配,逻辑or关系
# grep -e "root" -e "tom" test1.txt

-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到

# grep -w -o -q "^root" test1.txt 
# echo $?
0
# grep -w -o -q "^aaaa" test1.txt 
# echo $?
1

-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep
移步到正则表达式的学习

 

总结
-i:在搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
-e:实现多个选项的匹配,逻辑or关系
-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到
-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep