1. 程式人生 > >shell指令碼學習筆記 (正則表示式)

shell指令碼學習筆記 (正則表示式)

         正則表示式一般有三個部分組成,他們分別是:字元類數量限定符位置限定符。規定一些特殊語法表示字元類、數

量限定符和位置關係,然後用這些特殊語法和普通字元一起表示一個模式,這就是正則表示式(Regular Expression)。我們以一

個例子開始吧。假如給你一個檔案,裡面存放的是IP地址,但是有一些不是合格的,請你找出合格的IP地址。我想不知道正

則表示式的人一定會覺得好陌生,我拿一個迴圈去實現,我之前也被問到過這個問題,也是想著拿迴圈來完成,寫出一個函

數來實現這個查詢功能實在是不簡單,而且不能保證正確性。這時候正是正則表示式登場的時候了。下面是我寫的一個正則

表示式:

      

      此時此刻是不是覺得挺神奇的,我當時也感覺到了,上面的五個“IP”地址中,只有一個滿足要求的,我們一條

命令就找出來了,是不是頓時被吸引住了,那麼我們開始正則表示式的探討吧。

1.字元類:

       它們在模式中表示一個字元,但是取值範圍是一類字元中的任意一個。常見的字元類如下:


        我寫了一些簡單的程式碼來驗證上述字元類

        

       

2.數量限定符

數量限定符指明字元類出現的次數,以幫助模式匹配,常見的數量限定符如下:


    我寫的測試程式碼如下:

      

     我的使用的是centos,不知道細心的你發現沒有,有一條語法不支援即:{ ,M}。Z這個在別的linux上是可以的,

比如ubantu,我想這個問題應該是不同平臺的差異導致的吧。我在同學的ubantu平臺下測試了是可以的,這點可以保證。

3.位置限定符

顧名思義位置限定符使用限定字元類的位置的,比如我們還是拿IP地址來說吧,IP地址分為四個部分,每兩個部分之間

拿 '.' 隔開,而每一部分都可以拿字元類和數量限定符描述。

       

     

     

特殊字元:

1. \   該字元用於轉移,上面的例子中使用到 '.' 的時候都要用 '\' 轉移一下,否則無法被解釋

      2. |    '|' 可用於連線兩個 字表達式

      3. ()   '()'可將莫一部分作為一個整體,然後我們可以對整體進行操作

      

      

       到這裡正則表達的語法基本上講完了,下面對以上事例中使用到的工具進行簡單的介紹,grep工具相信大家都知道

吧,linux平臺下的自帶的工具,對grep的介紹我引用搜狗百科的介紹:grep是一種強大的文字搜尋工具,它能使用正

則表示式搜尋文字,並把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。利用這些返回值就可進行一

些自動化的文字處理工作。 我在上面的例子中使用的是egrep工具,是grep的擴充套件,這個工具的更多用法以及上面介紹

的一些不充分的地方大家可以去百科上查詢一下,其實還有一些更高階的工具也是支援這則表示式的,我將在結下來的

部落格中再介紹。

     我個人覺得死記這些這些字元的意思是不恰當的,我們應該通過不斷的練習來學習正則表示式,這樣才能達到好的效

果,忘記的時候我們可以去看一看這些正則表示式的模組的用處,最後希望對大家有一些幫助。