什么是正则表达式:

      正则表达式是完成数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。


     正则表达式的元字符(Metacharacters):元字符是用来阐释字符表达式意义的字符,就是用来描述字符的所要表达的意思。


    正则表达式的元字符又分基本正则表达式元字符和扩展表达式元字符。


    基本表达式元字符:

         字符匹配元字符:

               .: 匹配任意单个字符。相当于shell文件名通配符?号

                    例:r..t  root rabt r和t之间任意2个字符都可以


              [ ]: 匹配指定范围内的任意单个字符。

                    例:1[23]3  

                      123 133  []内面2和3都可以匹配


              [^]:取反

                    例:1[23]3  

                      143 153  不是[]内面的2和3其他的都可以


         次数匹配元字符:

               *: 任意长度,它前面的字符可以出现任意次。与shell文件名通配符*表示任意长度的              任意字符

                     例:a*b 

                        aaab b *号a可以出现任意次数包括0次


               \?: 0次或1次,它前面的字符是可有可无的

                     例:a\?b

                         ab b  \是转义符合,\?前面a最多出现一次,也可以没有


               \+: 1次或多次

                     例:a\+b 

                         ab aab 此处a必须出现1次,最多不限                         


               \{m\}: m次,它前的字符要出现m次

                     例:1\{2\}3

                          113  1要出现2次


               \{m,n\}: 至少m次,至多n次

                     例:1\{2,5\}3

                          113,1113,11113 此处的1最少出现2次,最多出现5次

       

               \{m,\}:至少m次

                     例:1\(2,\)3

                         113,111113 此处1最少2次,无上限  

         

                \{0,n\}: 至多n次

                     例: 1\(0,3\)3

                          3,1113, 此处的1最少0次,但最多3次


           位置锚定:

                 ^: 行首锚定;

                      例:^A

                          Avbff 大A必须出现在的行首


                 $: 行尾锚定:

                      例:A$

                          abcsA  大A必须出现在行尾

                 ^$: 空白行

                     ^空白字符为行首也$空白字符为行尾,即表示空白

 

            单词:不包含特殊字符的连续字符组成的串

                 \<: 词首,出现于单词左侧,

                      例:\

                            roottt root必须出现在单词的左边,能匹配到roottt,不能匹配rrroot


                 \>: 词尾,出现于单词右侧, 

                      例:root\>

                            rrroot root必须出现在单词的右边,能匹配rrroot,不能匹配roottt 


                  \b:同\<,\>写在单词前面匹配词首,写在单词后面匹配词尾

                       例:\broot  

                             roottt root必须出现在单词的左边,能匹配roottt,不能匹配rrroot

   

                       例: root\b

                             rrroot  root必须出现在单词的右边,能匹配rrroot,不能匹配roott 


                  \ : 精确锚定单词

                       例:\ 

                             root     root出现单词的前面也出现单词的后面,即是准确瞄定位置


           分组:

                   \(\):分组

                        例:\(12\)1

                             121   12必须同时出现


                  \n:引用
                       例:\(12\)3\1

                            12312  \1意思是把\(12\)匹配模式内容在\1位置打印出来

                        注:分组的括号可以嵌套使用如 \(12\(23\)\),而需引用位置为从第一个左                      括号开始为\1,第二左括号为\2 ,以此类推。


           扩展表达式:

                   与基本表达式基本相同,不同点无需\转义。


                   另比基本表达式多有|元字符:

                     |:或者   

                          例:cat|Cat

                              cat或者是Cat。易出现t|C之类的错误


           正则表达式的用法:

                     grep [option].. 'PATTERN' FILE... 

                          option选项:

                             -v: 反向选取

                             -o: 仅显示匹配的字串,而非字串所在的行

                             -i: ignore-case,忽略字符大小写

                             -E: 支持使用扩展正则表达式

                             -A #:显示匹配到行的后几行

                             -B #:显示匹配到行的前几行

                             -C #:显示匹配到行的前后几行

                     

                       例:grep -o "^root" /etc/passwd


            扩展正则表达式写法:

                       例:grep -E -o "^root" /etc/passwd

                       或  egerp -o "^root" /etc/passwd

      这里举例出正则表达式常用,其它的需要进一步了解可以查阅手册或资料。如有不当之处请大神指点。