shell下正則表達式與其工具grep

一.grep相關知識

1.grep

     grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

2.grep工作原理

     grep有兩種模式:Basic和Extend模式。

    在Basic模式下,命令直接grep ,其中的?、+、{}、|、()都被解釋爲普通字符,如果要使用其的特殊意義,就必須對其用轉義字符進行轉義。

    在Extend模式下,命令grep-E,其中的?、+、{}、|、()都是特殊字符,要匹配時必須用轉義字符將其轉義,變爲普通字符。

    grep命令在一個或多個文件中查找某個字符模式,如果這個模式中包含空格,就必須用引號把它括起來。grep命令中,模式可以是一個被引號括起來的字符串,也可以是單個詞。位於模式之後的所有單詞都被視爲文件名。grep將輸出發送到屏幕,它不會對輸入文件進行任何修改或變化。grep返回的退出狀態爲0,表示成功。退出狀態爲1,表示沒有找到。如果找不到指定的文件,退出狀態爲2。

3.grep工具選項

  常用的grep選項:

   grep-i:匹配時忽略字母大小寫

   grep-n:列出所有匹配的文本行,並顯示行號

   grep-v:只顯示不匹配的文本行

   grep-w:匹配整個單詞

   grep-x:匹配整個文本行

   grep-c:只打印匹配的文本行的行數,不顯示匹配內容

不常用的選項:

   grep-l:只列出含有匹配的文本行的文件的文件名,不顯示匹配內容

   grep-h:搜索多個文件時,不顯示匹配文件名前綴

   grep-s:不顯示關於不存在或者無法讀取文件的錯誤

   grep-r:遞歸搜索,不僅搜索當前目錄,還搜索各級子目錄

   grep-q:禁止輸出任何匹配結果,而是以退出碼狀態的形式表示是否匹配成功,其中0表示找到了匹配的文本行

   grep-P:支持Perl正則表達式

   grep-F:不支持正則表達式,將模式按字面意義進行匹配

   grep-b:打印匹配的文本行到文件投的偏移量,以字節爲單位

二.正則表達式

   1.正則表達式:簡單來說就是通過描述某種規則,用這種規則去匹配信息。正則表達式一般要用單引號括起來

      正則表達式的三要素:數量限定符、位置限定符和字符類

   2.三要素

     1>字符類:描述匹配字符信息

     wKiom1dvltbRG_9YAADqXMY6RA8687.png-wh_50

     2>數量限定符:用來描述匹配字符數量

        其中?、+、*這三個較爲重要

    wKioL1dvlvbgBZ8sAALWTqA8MgE945.png-wh_50

     3>用來描述匹配字符位置信息

         其中常用的是^ 和$

      wKioL1dvlyKgUp2eAAGcHe0VTYw583.png-wh_50

 三.正則表達式結合grep工具的具體例子

    1.數量限定符例子(常用的)

       1>使用? 前導單元出現0次或一次

        wKioL1duNqbDL4N7AAAYT5bUq6k612.png-wh_50

       2>使用+   前導單元出現1次或多次

        wKiom1duN8KBRooeAAAZR8SQm7Y715.png-wh_50

       3>使用*  緊跟前面的單元出現0次或多次

       wKiom1duODmhaS5TAAAYSzvMo58231.png-wh_50

    2.字符類的例子(常用的)

       1>使用 . 匹配任意一個字符

         wKioL1duOPKTxkjyAAAaxUPlYfM127.png-wh_50

       2>使用[] 匹配括號裏任意一個字符

         wKiom1duOeHxghPRAAAM6vMxICk108.png-wh_50

       3>使用^  匹配除中括號內的任意一個字符 

          wKioL1duOomCAZ2VAAAPASTFIH8987.png-wh_50  

   3.位置限定符的例子 (常用的)

       以file文件裏內容爲例

        wKiom1duO4CAca9EAAAUjlo4x6U843.png-wh_50

      1>^ 匹配行首位置

           以hel開頭的行

         wKioL1duO5eSvrgFAAAU1vlf5Pg291.png-wh_50

         

      2>$ 匹配行末位置 

           以t結尾的行

         wKioL1duO_jCQeboAAANVtL3ltg213.png-wh_50

4.混合起來複雜的運用

    file文件裏存ip信息

     wKioL1dvmdqSUPr5AAAiQRLPcps164.png-wh_50

     

   1>去粗略匹配一個ip地址 

     用命令匹配 

       wKioL1dvmWGBOZBEAAAYASGDtRM646.png-wh_50

     由於grep-E是Extend模式,.是特殊字符,而要對其匹配就必須轉義

      wKioL1duRDPwtek5AAAZIcv7N94532.png-wh_50   

     ()將正則表達式的一部分括起來組成一個單元,然後去匹配 

  2>寫一個shell腳本去匹配file裏的ip

      shell腳本:

      wKiom1dvlm3jjmCFAAEVvqw5y7w153.png-wh_50

      count 用來計數匹配到的ip地址的個數

      運行結果:

      wKiom1dvlqnz_HUpAAAQqJhAQK4214.png-wh_50


    

    

    

    

       

    

 

         


           

       

   

  




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章