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

擴展正則表達式與基本正則表達式用法差不多;區別在于反斜杠”\“的不同?;菊齽t表達式元字符中,次數匹配,分組和或者都加反斜杠”\“;

而擴展正則表達式中,次數匹配,分組和或者都不需要加”\“。具體用法參考基本正則表達式,這里就不舉例說明了。  

     

原創文章,作者:shenjialong,如若轉載,請注明出處:http://www.www58058.com/77432

(0)
shenjialongshenjialong
上一篇 2017-06-04 11:14
下一篇 2017-06-04 11:59

相關推薦

  • bash腳本進階(續)

     1、打印99乘法表 [root@ _212_ ~/bin/for_script]# cat 99_changfa.sh  #!/bin/bash line=1 for i in `seq 1 9`;     …

    Linux干貨 2016-08-21
  • Linux bash編程基礎語法總結

    前言 在Linux學習過程中,我們無可避免的會碰到一個既讓人喜歡,又令人頭疼的神奇的東西——bash編程,即shell腳本。那么什么是shell腳本呢?shell是一個命令語言解釋器,而shell腳本則是Linux命令的集合,按照預設的順序依次解釋執行,來完成特定的、較復雜的系統管理任務,類似于Windows中的批處理文件。本文帶來的是bash編程的基礎語法…

    Linux干貨 2015-04-04
  • keepalived的初級使用

        1、雙主模型的ipvs高可用   一、雙主模型的ipvs高可用     1)網絡結構圖       2)、ipvs的類型是dr模型,調度算法是rr       RS1和RS2都是centos6.8 對RS1和RS2的配置:…

    Linux干貨 2017-05-15
  • 網絡管理1

    一、知識整理 1、路由轉發:拆除第一層MAC地址,根據IP地址廣播,收到信號后重新封裝。一個路由器連接多個廣播域,一個交換機連接多個沖突域。 2、網絡用戶應用程序:WEB瀏覽器;即時消息;電子郵件;協作(視頻會議,vnc);web網絡服務;文件網絡服務;數據庫服務;中間件服務(Tomcat);安全服務(netfilter)。 3、HDR:報頭。Frame C…

    Linux干貨 2016-09-05
  • 馬哥教育網絡班20期+第6周課程練習

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp sed 's/^[[:space:]]/#&/' /tmp/rc.sysinit 2、…

    Linux干貨 2016-08-15
  • 用戶和組的管理

    通過命令、passwd和shadow的格式,講述了用戶和組的管理

    Linux干貨 2017-12-17
欧美性久久久久