首页 > 代码库 > Linux之正则表达式

Linux之正则表达式

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

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

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

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

         正则表达式分为:

                   基本正则表达式:grep支持

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

                   fgrep:fast不支持使用正则表达式

grep命令的语法:

                   grep  [OPTION]··· ‘PATTERN’  FILE

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

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

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

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

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

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

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

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

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

                            [[:alpha:]]à字母

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

                   [^]:取反

举例对上边命令说明:

                            wKiom1O5K1CDKM1SAACLfUjqing082.jpg

 

                            wKiom1O5K5iyRGfiAAEkGUYFy-k552.jpg

                            wKiom1O5K9uSOBz7AAGzWgtHzrc946.jpg

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

         方式一:可以再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     

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

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

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

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

                   wKioL1O5K9-BmKc5AACdyoIT_gE536.jpg这么多as只匹配出了行首为as的行

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

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

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

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

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

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

                   \b:锚定词首词尾都可以,放在单词左侧则锚定词首,放在单词右侧则锚定词尾

                   wKioL1O5LB3T9qp4AAB0-lVzOR4325.jpg

                   wKioL1O5LEHzMlVKAAA5IFkc4Dg564.jpg      

                   wKiom1O5LI2wED_yAAA4UKr4RNg155.jpg

分组:

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

                   wKioL1O5LJCT-PztAADIQaOs7mA059.jpg

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

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

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

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

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

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

                   wKioL1O5LK-RKnwBAACBOJFu8LA934.jpg

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

grep命令的选项:

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

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

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

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

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

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

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

                          wKiom1O5LTywC8sDAAETIWx_1io432.jpg

扩展正则表达式: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


本文出自 “aolens·程超” 博客,请务必保留此出处http://aolens.blog.51cto.com/7021142/1435077