grep與正則表達式

一、grep

       grep常用于文本搜索。通過自定義的模式(pattern),篩選出使用者需要的文本內容。除了有grep,還有egrep和fgrep。其中egrep = grep  –E,而fgrep則是不支持正則表達式。

       grep語法:grep [option] pattern [file] 

       常用option如下:

              -i:忽略字符的大小

              -n:顯示匹配的行號

              -c:統計匹配的行數

              -o:只顯示匹配到的內容

              -q:靜默模式,不顯示出任何信息

              -e:實現多個選項的or的關系

              -w:匹配整個單詞

              -v:顯示除pattern外的內容

              -F:相當于fgrep

              -E:相當于egrep

二、正則表達式

       1、匹配字符:

              .     匹配任意單個字符

              []    匹配中括號內指定范圍的任意單個字符

              [^]   匹配中括號指定范圍外的任意單個字符

              [:alnum:] 匹配字母和數字

              [:alpha:]  匹配任何英文

              [:lower:]  小寫英文字母

              [:upper:]  大寫英文字母

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

              [:space:]  水平和垂直的空白字符(范圍比blank的廣)

              [:cntrl:]   不可打印的控制字符(退格、刪除、警鈴等)

              [:digit:]   十進制數字

              [:xdigit:]  十六進制數字

              [:graph:]  可打印的非空白字符

              [:print:]   可打印的字符

              [:punct:]  標點符號

       2、匹配次數:

              *  匹配前面的字符任意次,包括0次。

              \?   匹配前面的字符0或1次

              \+   匹配前面的字符至少一次

              \{n\} 匹配前面的字符n次

              \{m,n\} 匹配前面的字符從m到n次

              \{,n\}  匹配前面的字符至多n次

              \{n,\}  匹配前面的字符至少n次

      3、定位

              ^ 定位行首,處于pattern的最左側

              $ 定位行尾,用于pattern的最右側

              \<或\b 詞首,用于pattern中單詞的左側

              \>或\b 詞尾,用于pattern中單詞的右側

              \<pattern\> 匹配整個單詞

       4、分組

              \( \)將一個或多個字符捆綁在一起,當作一個整體進行處理。

三、小結

       通過一和二的簡單介紹,現在將兩者結合在一起,并把學習后得到的一些理解寫下來。

1、pattern可以直接為想要得到的內容,如圖1。

grep與正則表達式

圖1

2、[ ]中括號里表示的是匹配的內容的范圍,用此括號匹配的結果是一個字符。比如[a-d]表示的是英文abcd這個范圍。[ ]不只表示一種范圍、內容,可以有多種,比如[a-z[:punct:]0-9]表示的是標點符號、英文字母a至z還有數字0-9。但是沒有[0-10]或者是[0-100]等類似的范圍,因為在pattern中把需要被過濾的內容都當作字符,而內容中的數字也被拆成一個個字符,沒有大小可言,簡單點說就是100其實是三個字符1、0、0。還有,單獨用類似上文“二”中的[:digit:]這樣的內容是會出錯的,需要在[:digit:]外再加一個中括號才能表示匹配得到的是一個在digit范圍內的字符,如圖2。

grep與正則表達式

圖2

3、再次強調一點,[ ]表示的是匹配得到一個字符,是一個。因此,需要得到多個字符,得用上文
“二”的第二點知識,如圖3。

grep與正則表達式

圖3

4、\< \>中間括起來的可以為英文和數字,但是不能是別的標點符號,如圖4。

grep與正則表達式

圖4

“\<\>”和“\>”是把一串連續的英文數字當作整體,而“\<”不是,如圖5最后兩個命令都匹配不到內容,是因為“\<\>”和“\>”認為存在abcd但不存在abc。

grep與正則表達式

圖5

5、\(和\)必須成對出現,并且他們被當作一個整體進行處理,并且分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量,命名方式:\1,\2,\3…

示例:\(string1\+\(string2\)*\)

\1:string1\+\(string2\)*

\2:string2

6、 grep –E 作用:除了\<和\>,其他的例如{ }、( ),沒有添加-E時,\{\}表示范圍,添加了-E選項后,直接{}表示范圍。

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

(0)
EminemEminem
上一篇 2017-07-29
下一篇 2017-07-29

相關推薦

  • 第十一周

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 2、描述創建私有CA的過程,以及為客戶端發來的證書請求進行辦法證書。 CA 服務器端: (1)生成 CA 服務器的私鑰 (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) (2)生成 CA服務器自謙證書 openssl req …

    Linux干貨 2017-03-30
  • Linux系統中的Inode節點表

    索引節點是指在許多類Unix文件系統中的一種數據結構。每個索引節點保存了文件系統中的一個文件系統對象的元信息數據,但不包括數據內容或者文件名。

    2017-11-16
  • lvs-dr

            通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;     VIP通常配置在lo:0…

    2017-06-29
  • Jumpserver 3.0 全新改版 更輕、更快、更便捷

               Jumpserver Wiki                       &…

    系統運維 2016-01-05
  • 我與Linux的第一次親密接觸

        作為一個新手,經過一周的學習,我對Linux目前有了些許的了解,從Linux的發展史中,開源共享精神深深的感染了我,也使得我對Linux的興趣更加濃厚。對于一個一直翹計算機課的我來說,入門和基礎是一項非常艱巨的任務,初期為了搭建學習的環境,也是費了不小的功夫,相信許多萌也對此有很大的感觸,在這里,我來和大家分享一下如何去構建環境。…

    Linux干貨 2017-03-26
欧美性久久久久