grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。grep主要作用是过滤出指定的行,指定的行满足什么条件,满足的条件可配合正则表达式来表示,实现强大的文本处理。
一、什么是正则表达式?
正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能。正则表达式只是字符串的一种描述(一种表示法),只有和支持正则表达式的工具相结合才能进行字符串处理。
1.1、正则表达式的构成:
正则表达式由元字符和文本字符两种字符构成。
1.2、主要分为两类:
1、基本正则表达式 (BRE)
2、扩展正则表达式 (ERE)
1.3 特殊字符类:
POSIX字符类:为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface)增加了特殊的字符类。以[:classname]的格式给出,grep命令支持POSIX字符类
类名 |
意义 |
[:upper:] | 表示大写字母[A~Z] |
[:lower:] | 表示小写字母[a~z] |
[:digit:] |
表示阿拉伯数字[0~9] |
[:alnum:] |
表示大小写字母和阿拉伯数字[A~Za~z0~9] |
[:space:] |
表示任何产生空白的字符,包括空格或Tab键等 |
[:alpha:] |
表示大小写字母[A~Za~z] |
[:cntrl:] |
表示键盘的控制按键,包括Tab、Del等按键 |
[:graph:] | 表示除了空格符(空格键与Tab键)外的其他所有按键 |
[:print:] | 表示任何可以被打印出来的字符 |
[:xdigit:] | 表示十六进制数字[0~9A~Fa~f] |
[:blank:] | 表示空格键与Tab键 |
[:punct:] | 表示标点符号,包括:" ' ? ! ; : # $... |
二、grep命令的使用
2.1、 grep 家族有三个成员分别是:
grep:默认支持基本正则表达式.
egrep:默认支持扩展正则表达式,相当于grep -E.
fgrep:不支持使用正则表达式.
2.2、命令格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
2.3、OPTIONS:匹配方式选择
-E : 启用扩展正则表达式(ERE),可使用扩展元字符。
-F : 指定的模式被解释为字符串,不支持正则表示式。主要是在简单搜索中增快搜索速度。
-G : 启用基本正则表达式(BRE)。
-P :启用perl的正则表达式。(PCRE)
例:如过滤文件中有.*字符的行
[root@localhost opt]# cat file
Paget 6 Status: 200
Paget 6 Status: 200.*
Page 1 Body: <!doctype html> .*.
Page 9 Body: <!doctype html> ...
[root@localhost opt]# grep -F '.*' file
Paget 6 Status: 200.*
Page 1 Body: <!doctype html> .*.
2.4、OPTIONS:匹配控制
-i: 不区分模式 PATTERN 和输入文件中的大小写。
-v: 反向选择ÿ