LINUX-初学正则表达式

正则表达式

  

简介

      REGEXP:由一类特殊字符及文本字符由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)
                   不表示字符字面意义,而表示控制或通配的功能。

      程序支持:grep,sed,awk,vim,less,nginx,varnish等,下面将介绍grep中正则表达式的用法。

      正则表达式分基本正则表达式(BRE)和扩展正则表达式(ERE)

     正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块PCRE(Perl Compatible Regular Expressions)

     元字符分类:字符匹配、匹配次数、位置锚定、分组

 

BRE元字符

      字符匹配:


                  .                              匹配任意单个字符

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

                [^]                          匹配指定范围外的任意单个字符


              [:alnum:]                     字母和数字,即a-z,A-Z,0-9


              [:alpha:]                      代表任何英文大小写字符,即a-z,A-Z

              [:lower:]                       小写字母 ,即a-z

              [:upper:]                      大写字母,即A-Z


              [:blank:]                       空白字符(空格和制表符)

              [:space:]                      水平和垂直的空白字符,包括空格键,[tab],CR等


              [:digit:]                        十进制数字  ,即0-9

              [:xdigit:]                       十六进制数字,包括:0-9,A-F,a-f的数字与字符


              [:cntrl:]                         不可打印的控制字符(退格、删除、警铃…)

              [graph:]                        可打印的非空白字符(空格键与[tab]按键外的其他所有按键 

              [:print:]                         任何可以被打印出来的字符

              [:punct:]                       标点符号,即 : “  ‘  ? ! ; :#  $….

 匹配次数:

         用在要指定次数的字符后面,用于指定前面的字符要出现的次数

     


        *          匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配)


       .*          任意长度的任意 。                   例如:a*,可以表示a,aa,aaa,aaaaa,aaaa…a.


       \?          匹配其前面的字符0或1次 。      例如:ab\?c ,表示ac,abc


       \+          匹配其前面的字符至少一次 。   例如:ab\+c  表示abc,abbc,abbbc等。 \+匹配前面一个字符

                                                                                  最少1次,最多任意次,不包括0次。


      \{n\}       匹配前面的字符n次。               例如: ab\{2\}c ,表示在a与c之间有两个b,

                                                                              即abbc


    {m,n}     匹配前面的字符至少m次,至多n次 。  例:ab{1,3} c,表示在a与c之间有1个到3个b,即                                                                                                      abc,abbc,abbbc


      \{,n\}      匹配前面的字符至多n次             例:ab\{,3\}c,表示ac,abc,abbc,abbbc。

                                                                          最多3次,可以包括0次。 


      {m,}     匹配前面的字符至少m次             例:ab{2,}c,表示a与c之间最少有2个b,即                                                                                                               abbc,abbbc,abbbbc,abbb…c


  

      示例:在/app下先创建一些文件,运用BRE中匹配次数,进行简单的操作。如下图



                 LINUX-初学正则表达式 


 

位置锚定:

         定位出现的位置


           ^               行首锚定,用于模式的最左侧           例:^content,匹配行首为content的行    


          $                 行尾锚定,用于模式的最右侧           例:txt$,匹配行末为txt结尾的行;^$匹配空白行


    ^PATTERN$        用于模式匹配整行 ;^$匹配空行;^[[:space:]]*$匹配空白行


      \< 或 \b           词首锚定,用于单词模式的左侧       例:\<th匹配… this…,但不匹配tenth等


       \> 或 \b          词尾锚定;用于单词模式的右侧       例:p\>匹配leap,但不匹配parent等


    \<PATTERN\>     匹配整个单词        例:\bat\b 匹配… at …, 但不匹配 cat 、batch等


      

 下面我们在/etc/passwd文件中,运用BRE位置锚定来过滤查看一些文件的内容。如下图


                    LINUX-初学正则表达式

   从上图中可以看出,^$,^[[:space:]]$只匹配空行;\<bash\>,只匹配带有整个单词bash的行,不匹配包含bash单词的     行,如sbin的行。


分组:

        \(\) 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+  ;
        分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …; 
       \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。
            
       后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身 

                      示例:\(root\)*\1

       下面通过一些例子来简单介绍分组的基本用法,还是以/etc/passwd文件为例。如下图:

                

                 LINUX-初学正则表达式

      上图中:第一个组\(daemon\) ,\1表示调用第一个组匹配到的字符,不是模式本身;虽然都是daemon,但是意思不   一样。\2表示调用第二个组匹配到的字符。

                      

                   LINUX-初学正则表达式

或者:\| 
       示例:a\|b: a或b  C\|cat: C或cat   \(C\|c\)at:Cat或cat

     例:在/app下创建a、 b、 act、 bct、 cct、 dct 六个文件,运用正则表达式元字符或者,来进行些简单操作。如下图:

               LINUX-初学正则表达式

扩展正则表达式

  元字符:  
    字符匹配: 
          . 任意单个字符 
         [] 指定范围的字符 
         [^] 不在指定范围的字符
     
    位置锚定: 
           ^  :行首 
           $  :行尾 
       \<, \b :语首
       \>, \b :语尾  
   
    
    次数匹配:
       *:匹配前面字符任意次 
       
       ?: 0或1次 
       +:1次或多次 
     {m}:匹配m次 
    {m,n}:至少m,至多n次

    分组: 
       () 后向引用:\1, \2, …  
   
   或者: a|b: a或b     C|cat: C或cat 
         (C|c)at:Cat或cat

扩展正则表达式与基本正则表达式用法差不多;区别在于反斜杠”\“的不同。基本正则表达式元字符中,次数匹配,分组和或者都加反斜杠”\“;

而扩展正则表达式中,次数匹配,分组和或者都不需要加”\“。具体用法参考基本正则表达式,这里就不举例说明了。  

     

原创文章,作者:shenjialong,如若转载,请注明出处:http://www.178linux.com/77432

(0)
shenjialongshenjialong
上一篇 2017-06-04
下一篇 2017-06-04

相关推荐

  • linux磁盘管理及文件系统介绍

        硬盘是计算机必备组成部分,现在的硬盘分固态硬盘和传统机械硬盘,这里要介绍的是传统机械硬盘。     一.硬盘最基本结构         1.硬盘是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。…

    Linux干货 2016-06-22
  • yum –rpm前端工具详解

     1、yum 介绍        YUM: Yellowdog Update Modifier, rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具        &nbsp…

    Linux干货 2016-08-24
  • rpm包管理

    一、概述 RPM 是RPM Package Manager(RPM软件包管理器)的缩写。由redhat公司的Redhat package manager改名而来,成了RedHat的工业标准 二、rpm的命名格式: rpm包的命名格式:name-version-relase.arch.rpm version: major.minor.release,同源代码 …

    Linux干货 2015-10-07
  • N22-第二周作业

    1、linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。    文件管理命令        mkdir     创建目录         &…

    Linux干货 2016-08-22
  • redis-cli的一些有趣也很有用的功能

    redis-cli我们最常用的三个参数就是-h、-p、-a选项,分配用来指定连接的redis-server的host、port和登录密码。 通过redis-cli –help发现,redis-cli还提供了其他很多的参数和功能。 1)-x-x选项从标准输入(stdin)读取最后一个参数。 比如从管道中读取输入: echo -en “chen.qun” | r…

    Linux干货 2015-03-16
  • 马哥Linux第四周作业

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 ~]# cp -r /etc/skel/ /home/user1 ~]# chmod -R g0-rwx /home/user1/ 2.编辑/etc/group文件,添加组hadoop 编辑/etc/group 写入:hado…

    2018-01-07