grep家族共有三个:grep
egrep [Extend grep]
fgrep [Fast grep]
特点:
命令 |
是否支持正则 |
支持的正则类型 |
grep |
是 |
基本正则表达式 |
egrep |
是 |
扩展正则表达式 |
fgrep |
否 |
|
命令格式:grep [选项] [文件]
常用选项:
-E:开启扩展(extend)的正则表达式
-i:忽略大小写(ignore case)
-v:反选(invert),只打印没有匹配的。
-n:显示行号
-w:被匹配的文本只能是单词,而不是单词的某一部分。例如:文本中只有liker和like,而我搜索的是like,就可以使用-w选项来避免搜索到liker。
-c:显示共有多少行被匹配到了,而不是显示被匹配的内容。同时使用-cv可以显示有多少行没有被匹配到。
--color:将匹配到的内容以颜色高亮显示
-A n:显示匹配到的字符串所在的行及其后n行 after
-B n:显示匹配到的字符串所在的行及其前n行 before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
多文件查找
-l:查找关键字在哪个文件中包含。例如:grep –l “hello” *.txt就是在当前目录下的所有txt文件中查找哪个文件中包含hello这个词
-L:查找关键字在哪个文件中不包含
区别:
grep的正则表达式是基本正则表达式
egrep的正则表达式是扩展正则表达式
fgrep完全不支持任何正则表达式
例如:想搜索以roo开头或者bash结尾的行
egrep:egrep ‘^root|bash$’ passwd
grep: grep ‘^root|bash$’ passwd,这里是搜不出结果的,因为“|”是扩展正则表达式,除非这里再加上-E选项。
fgrep:fgrep ‘^root|bash$’ passwd,这里一样搜不出来,因为在fgrep中是没有特殊字符的,只有普通字符,这里的”^”就是符号^,而不是以某字符开头的意义。
基本正则表达式和扩展正则表达式
正则表达式分为两大类:
基本正则表达式(BRE)
扩展正则表达式(ERE)
区别:
在基本正则表达式中,仅有“^”、“$”、“.”、“[”、“]”、“*”这些元字符,其他的都会被识别为普通字符。
在扩展正则表达式中,则在基本正则表达式的基础之上,新增了“(”、“)”、“{”、“}”、“?”、“+”、“|”等元字符。
只有在用反斜杠进行转义的情况下,字符“(”、“)”、“{”、“}”才会在扩展正则表达式中被当做元字符处理,在基本正则表达式中,任何元字符前面加反斜杠反而会被当做普通字符来处理。