grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。
grep egrep fgrep(不支持正则表达式)
grep需要标准输入 因此常常位于管道右侧
命令参数:
--color=auto: 对匹配到的文本着色显示
-v: 显示不被pattern匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
grep –e ‘cat ' -e ‘dog' file
-w:匹配整个单词 数字加字母下划线全都算单词的一部分,其他的都是单词的分隔符
-E:相当于egrep
-F:相当于fgrep,不支持正则表达式
-f: 跟一个文件(写有不同字符)进行内容检索是逻辑or关系
练习题:
1、显示三个用户root、centos、arch的UID和默认shell (用户需要自己创建)

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一 个小括号的行

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

4、使用egrep取出上面路径的目录名

5、统计last命令中以root登录的每个主机IP地址登录次数

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
0-9: [0-9]
10-99: [1-9][0-9]
100-199: 1[0-9][0-9]
200-249: 2[0-5][0-9]
250-255: 25[0-5]
7、显示ifconfig命令结果中所有IPv4地址

8、将此字符串:welcome to centos linux 中的每个字符排序,重复 次数多的排到前面

正则表达式:
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符) 不表示字符字面意义,而表示控制或通配的功能 
程序支持:grep,sed,awk,vim, less,nginx,varnish等 
分两类: 
基本正则表达式:BRE 
扩展正则表达式:ERE 
grep -E, egrep 
正则表达式引擎: 
采用不同算法,检查处理正则表达式的软件模块 
PCRE(Perl Compatible Regular Expressions) 
元字符分类:字符匹配、匹配次数、位置锚定、分组 
man 7 regex
字符匹配:
. 匹配任意单个字符 默认是贪婪匹配
[] 匹配指定范围内的任意单个字符 .在里面也是点不需要转义
[^] 匹配指定范围外的任意单个字符 
[:alnum:] 字母和数字 
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z 
[:lower:] 小写字母 
[:upper:] 大写字母 
[:blank:] 空白字符(空格和制表符) 
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) 
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...) 
[:digit:] 十进制数字 
[:xdigit:]十六进制数字 
[:graph:] 可打印的非空白字符 
[:print:] 可打印字符 
[:punct:] 标点符号
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数 
* 匹配前面的字符任意次,包括0次 
贪婪模式:尽可能的匹配符合条件的字符 
.* 任意长度的任意字符 
\? 匹配其前面的字符0或1次 
\+ 匹配其前面的字符至少1次 
\{n\} 匹配前面的字符n次 
\{m,n\} 匹配前面的字符至少m次,至多n次 
\{,n\} 匹配前面的字符至多n次 
\{n,\} 匹配前面的字符至少n
位置锚定:定位出现的位置 
^ 行首锚定,用于模式的最左侧 
$ 行尾锚定,用于模式的最右侧 
^PATTERN$ 用于模式匹配整行 
^$ 空行 
^[[:space:]]*$ 空白行 
\< 或 \b 词首锚定,用于单词模式的左侧 
\> 或 \b 词尾锚定;用于单词模式的右侧 
\<PATTERN\> 匹配整个单词
