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
下一篇 2017-06-04

相關推薦

  • 進程管理和計劃任務

    進程管理使用的工具以及命令,計劃任務的創建和執行,以及工作中需要的注意事項

    2017-12-21
  • mount命令使用詳解

    一、掛載(mount)初識     1.什么是掛載         將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄作為其它文件訪問入口的行為。     2.常用的文件系統類型 &…

    Linux干貨 2016-09-01
  • Shell腳本編程

    Shell腳本編程

    2017-09-20
  • 馬哥教育網絡版21班第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干貨 2016-08-05
  • redis/twemproxy 客戶端連接異常

    對于一個DBA,客戶端連接異常問題可以說是家常便飯的事情,處理多了都想吐。 root cause無疑發生在三個地方,先找自身的原因,依次排查下去: 1)服務器端db的負載,如果負載太高,創建socket太慢引起超時。另外服務器端socket的個數太多,也可以導致創建連接需要很長的時間或者創建連接不成功。 2)網絡是夠有抖動,包括lvs/twemproxy重啟…

    Linux干貨 2015-04-03
  • 設計模式 ( 十二 ) 職責鏈模式(Chain of Responsibility)(對象行為

    1.概述        你去政府部門求人辦事過嗎?有時候你會遇到過官員踢球推責,你的問題在我這里能解決就解決,不能解決就推卸給另外個一個部門(對象)。至于到底誰來解決這個問題呢?政府部門就是為了可以避免屁民的請求與官員之間耦合在一起,讓多個(部門)對象都有可能接收請求,將這些(部門)對象連接成一條鏈,并且沿著這條鏈傳遞…

    Linux干貨 2015-07-15
欧美性久久久久