既然讲到的正则表达式,那么什么是正则表达式呢?

         正则表达式是一类“字符”所书写的表达模式,其中许多字符不表示其自身字面的意思,而是          表达为控制或通配等

         元字符:指正则表达式里的特殊字符,不表示其字面意思,而用于额外功能性描述

正则表达式提供强大的字符串处理能力,根据grepegrep,fgrep文本搜索工具,对目标文件进行逐行搜索,并显示其结果。

         正则表达式分为:

                   基本正则表达式:grep支持

                   扩展正则表达式:egrep,grep–E支持

         grep命令的语法:

                   grep  [OPTION]··· ‘PATTERN’  FILE

                            ——color=auto(默认是红色)

一:基本正则表达式的元字符匹配grep

                   .:在当前位置匹配单个任意字符

                  []:在中括号内匹配指定范围内的任意“单个”字符

                            [0-9]=[[:digit:]]à数字

                            [a-z]=[[:lower:]]à小写字母

                            [A-Z]=[[:upper:]]à大写字母

                            [[:space:]]à空白字符

                            [[:punct:]]à特殊字符

                            [[:alpha:]]à字母

                            [[:alnum:]]à字母和数字

                   [^]:取反

                   举例对上边命令说明:

                    Linux之正则表达式_grep

 

                    Linux之正则表达式_正则表达式_02

                    Linux之正则表达式_正则表达式_03

        大家可以看到被匹配出来的字符是红色的,这又是如何实现的呢?

             方式一:可以再grep  --color=auto ‘pattern’  file

             方式二alias  grep=’grep --color=auto’定义别名

二:次数匹配元字符:用于实现指定元字符“前边”的字符所能够出现的次数

                   *:任意长度,它前边的字符可以出现任意次

                            例如:a*b  那么它能匹配abaabaa···bb(a出现了0)

                   \?:它前边的字符出现0次或1

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

                            例如:a\{2\}b 那么它能匹配为aab

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

                            例如:a\{2,3\}b  那么它能匹配为aabaaab

                   \{m,\}:至少出现m次,多则不限

                \{0,n\}:最多出现n     

                    次数匹配默认情况下工作于贪婪模式,尽可能多的匹配字符*

                    .*:代表任意字符任意长度

三:位置锚定:就是制定匹配字符的位置

                   ^:表示行首锚定,字符必须出现在行首,^写在匹配字符的左侧

              Linux之正则表达式_正则表达式_04

               这么多as只匹配出了行首为as的行,这就是^行首锚定的作用

               $:表示行尾锚定,$字符写在字符右侧

               Linux之正则表达式_egrep_05

               同样是test.txt的文件内容,但只匹配出了行尾有sd的行

               ^$:空白行(行首行尾中间没有字符,为空白行)

      单词锚定:就是不包含特殊字符的连续字符组成的字符串叫单词

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

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

                \b:锚定词首词尾都可以,放在单词左侧则锚定词首等同\<,放在锚                              定尾等同\>

               Linux之正则表达式_egrep_06

               Linux之正则表达式_正则表达式_07      

               Linux之正则表达式_egrep_08

      分组:

               \(\):表示分组,\表示转义。

               Linux之正则表达式_正则表达式_09

               第一个命令是匹配ss出现一次

               第二个命令是匹配s出现两次

               第三个命令式匹配s没有规定出现几次

               引用括号分组是有次序的,括号的引用是自左而后的左括号,以及与其对应的                右括号

                   引用是外边的括号引用内部括号的值

                   \#:引用第n个括号所匹配到的内容,而非模式本身

                   Linux之正则表达式_grep_10

                   abc引用mm后为abcmm,最后再引用一遍abcmm,匹配出来的应该                       是abcmm.*abcmm

grep命令的选项:

                   -v:反向选取,显示没有匹配上的字符的行

                   -o:仅显示匹配的字符串,而非匹配到的字符串行

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

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

                   -A #:显示匹配行及后的#

                   -B #:显示匹配行及前的#

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

                          Linux之正则表达式_正则表达式_11

四:扩展正则表达式egrep/grep -E

        元字符匹配:

                       .:匹配单个任意字符

                       []:匹配指定范围的任意字符

                       [^]:取反

        次数匹配:用于实现指定元字符“前边”的字符所能够出现的次数

                       *:任意长度,它前边的字符可以出现任意次

                            例如:a*b  那么它能匹配abaabaa···bb(a出现了0)

                       ?:它前边的字符出现0次或1

                       +:它前边的字符至少出现一次,等同于{1}

                       {m}:它前边的字符要出现m

                            例如:a{2}b 那么它能匹配为aab

                       {m,n}:至少出现m次,至多出现n

                            例如:a{2,3}b  那么它能匹配为aabaaab

                       {m,}:至少出现m次,多则不限

                   {0,n}:最多出现n        

    位置锚定:就是制定匹配字符的位置

                       ^:表示行首锚定,字符必须出现在行首,^写在匹配字符的左侧

                $:表示行尾锚定,$字符写在字符右侧

                \<,\b:锚定词首,\<,\b出现于单词的左侧

                \>,\b:锚定词尾,\>,\b出现于单词的右侧

                ^$  = ^[[:space:]]*$ : 空白行

        分组:

               ():表示分组,\表示转义,\(\)则代表的是括号

        或者: |

                   或者符号“|”将|前后分为两部分

                         例如:con|cat     代表concat

                         Co(n|c)at   代表conatcocat