grep:
文本搜索工具,根据用户指定的模式,对目标文本逐行进行匹配检查,打印匹配到的行。基于Perl的正则表达式 
使用格式:grep [选项] 匹配模式 file对象
选项说明:
–color=auto:对匹配到的文本着色,高亮显示
 -i:忽略字符大小写
 -o:仅显示匹配到的字符串本身
 -v:方向匹配,匹配到的文本行不显示,不能匹配到的行显示
 -E:表示支持使用扩展的正则表达式,等同于egrep
 -q:静默模式,不输出任何信息到标准输出
 -A(after):显示匹配到的行和其后面的行,给一个数字

例子:grep -A 1 root /etc/passwd
 -B(before):显示匹配到的行和其前面的行,给一个数字

例子:grep -B 1 root /etc/passwd
 -C(center):显示匹配到的行和其前后的行,给一个数字

例子:grep -C 1 root /etc/passwd

字符匹配
. :匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^ ]:匹配指定范围外的任意当个字符
[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]
匹配次数
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数,默认为贪婪模式
*:表示匹配其前面的字符任意次,0,1,多次
例如:grep “x*y”
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或一次,即其前面的字符是可有可无的
\+:匹配其前面的字符一次或多次,即其前面的字符要出现至少一次
\{m\}:精确匹配到其前面字符的m次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次

位置锚定
^:行首锚定,用于模式的最左边
$:行尾锚定,用于模式的最右边
^pattern$:用于pattern来匹配整行
^$:空白行
^[[:space:]]$:空行或空白字符的行
单词:非特殊字符组成的连续字符都称为单词
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定,用于单词模式的右侧
\<pattern\>:匹配完整单词

带正则表达式整个匹配模式要用“ ”

练习

1:显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v “/bin/bash” /etc/passwd

2:找出/etc/passwd文件中的两位数或三位数的行
egrep “[0-9]{2,3}” /etc/passwd     // 匹配字符0-9中的2次或三次。匹配次数: [ ]   \{m,n\}

3:找出/etc/rc.d/rc.sysinit(centos 6)或/etc/grub2.cfg(centos 7)文件中,以至少一个空白字符开头,且后面有非空白字符的行
grep “^[[:space:]]+[^[:space:]]+” /etc/grub2.cfg                ^[[:space:]]空白字符开头,   [^[:space:]]不是空白字符的任意字符

4:找出”netstat -tan”命令的结果中以’LISTEN’后跟0、1或多个空白字符结尾的行
netstat -tan | grep “LISTEN[[:space:]]*$”       *:表示匹配其前面的字符任意次,0,1,多次