grep 是linux系统中一种强大的文本搜索工具根据用户指定的文本对目标文件进行逐行搜索,显示能够被模式匹配到的行
使用  格式:  grep   选项    文件路径(可跟多个文件
常用选项有:  grep   -v:反向,显示不能够被模式匹配到的行
             grep   -o:仅显示被模式匹配到的字符串,而非整行
             grep   -i:不区分字符大小写
             grep   -E:扩展正则表达式
    要想使用grep做到精确匹配,就要先掌握正则表达式;正则表达是一类字符所书写的模式,由元字符+所要匹配的条件组成,元字符不代表字符本身的意义,用于额外功能性的描述
    下面先介绍基本正则表达式常用到的元字符
字符匹配:
.  :匹配一行中任意单个字符,如:grep “r..t”查找文件中字母r开头中间跟任意两个字符字母t结尾的单词的行
[ ]:指定范围内的任意单个字符,如:grep  [ r ] 查找文件中包含字母“r"的行
[^]:匹配指定范围外的任意单个字符,如:grep  [^r]  查找文件中除了字母“r”以外的任意字符

次数匹配:
*     : 匹配任意次(包括0次),如:grep “x*y” 表示匹配y前面字符x出现0次或任意次的字符
\?    : 匹配其前面字符0次或1次,如:grep  ”x\?y" 表示匹配y前面字符x出现0次或1次
\{m\} : 指定匹配其前面字符m次,如:grep "x\{2\}y“ 表示精确匹配y前面字符x出现2次
\{m,n\}:指定匹配其前面字符出现至少m次,至多n次,如:grep ”x/{1,5}y“ 表示精确匹配y前面字符x出现最少1次最多5次
\{m,\} : 指定匹配其前面字符至少出现m次,如:grep ”x\{2,\}y“表示精确匹配y前面字符x最少出现2次
\{0,n\}:指定匹配其前面字符至多出现n次,如:grep ”x\{0,3\}y“表示精确匹配y前面字符x最多出现3次

位置锚定元字符:用于指定字符出现的位置
^:锚定行首; 如:grep ^root 表示匹配以单词root开头的行
$:锚定行尾;如:grep /bin/bash$ 表示匹配以/bin/bash 结尾的行
^$:空白行;  如:grep ”^$“ 表示匹配文件中所有的空白行
\<或\b:锚定词首;如 grep ”\<root" 表示精确匹配包含"root“开头的单词的行
>\或\b:锚定词尾;如 grep ”root\>“表示匹配包含”root“结尾的单词的行
分组:\(\);例如grep ”\(ab\)*xy“,表示匹配x前面ab为一组的字符出现任意次
引用:\1;后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
grep "\(a6b\)xy\1" 表示能够匹配到a6bxya6b
      \2:前向引用两次,如 grep "\(a6b\)xy\2" 表示能够匹配到a6bxya6ba6b

 egrep:扩展正则表达式,等同于 ”grep -E“,与grep用法大致相同,不过元字符不用转义
      字符匹配:
          .:任意单个字符
          []:指定范围内的任意单个字符
          [^]:指定范围外的任意单个字符
          次数匹配:
          *:匹配其前面的字符任意次
          ?:匹配其前面的字符0或1次
          +:匹配其前面的字符至少1次
         {m}:匹配其前面的字符m次
         {m,n}:至少m次,至多n次
         {m,}:至少m次
          {0,n}:至多n次
       锚定;
           ^:行首
           $:行尾
           \<,\b:词首
           \>,\b:词尾
       分组:( )
          |:或者;ac|bc表示ac或bc,字符串进行或者匹配
                  a(c|b)c表示acc或abc,使用分组可以单个字符进行或者匹配