grep、egrep及相應的正則表達式用法


    Linux系統中grep,egrep命令是一種強大的文本搜索工具,它們能使用正則表達式和擴展正則表達式搜索文本,並把匹配到的行打印出來。git


  1. 搜尋特定字符串"the"  注: n爲顯示行號正則表達式

      # grep -n "the" regular_express.txtshell


2.使用-v選項反向搜尋特定字符串"the"express

      # grep -vn "the" regular_express.txtide


3.匹配大小寫"the"的這個字符串,使用-i選項工具

      # grep -in "the" regular_express.txtspa


4.[] 表示匹配"[]"範圍內的字符串ci

     搜索test或tast這兩個單詞時,發現他們有共同的't?st',因此能夠這麼搜尋字符串

     # grep -n "t[ae]st" regular_express.txit

  注: 大寫英文/小寫英文/數字 能夠使用 [a-z]/[A-Z]/[0-9]等方式來書寫,也能夠寫在一塊兒

  [a-zA-Z0-9]表示要求字符串是數字以及英文

     若是咱們要匹配有數字的那行,例子以下:

     # grep -n "[0-9]" regular_express.txt

    也能夠用

    [[:lower:]]  代替a-z

    [[:digit:]]  代替0-9

    [[:upper:]]:全部大寫字母;

    [[:lower:]]:全部小寫字母;

    [[:digit:]]:全部的數字;

    [[:alpha:]]:全部字母;

    [[:space:]]:空白字符;

    [[:punct:]]:標點符號;

    範例:匹配以小寫字母開頭後面跟着兩個"oo"字母的字符串

        # grep -n "[^[:lower:]]oo" regular_express.txt

          匹配以數字結尾的字符串

        # grep -n "[[:digit:]$]" regular_express.txt等


5.[^] 表示匹配"[]"範圍以外的字符串,例如[^0-9]表示非數字字符,[^A-Z]表示非大寫字符範圍

        若是咱們要取得沒有數字的那行,則:

        # grep -n "[0-9]" regular_express.txt


6.^word表示匹配的字符串(word)在行首

       顯示行首爲"the"的字符串

       # grep -n "^the" regular_express.txt

       顯示行首是小寫字符

       # grep -n "^[a-z]" regular_express.txt 


7.word$表示匹配的字符串(word)在行尾

      顯示行尾爲點 . 的那一行

      # grep -n "\.$" regular_express.txt

      顯示空白行

      # grep -n "^$" regular_express.txt


8.  .號表示匹配1個任意字符

      找出g??d字符串,起頭g結束d的四個字符串

      # grep -n "g..d" regular_express.txt


9. *表示匹配0到無窮多個(正則表達式)前一個字符

      "goo*g"表明"gog","goog","gooog"...等

      # grep -n "goo*g" regular_express.txt


10. \?表示匹配前面的字符0次或1次

        匹配o字符0次或一次

        # grep -n "ro\?t" regular_express.txt


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

        匹配至少含有一個o字符的字符串

        grep -n "ro\+t" regular_express.txt


    注:   .號表明任意字符, .*則就表明空字符或者一個到N個任意字符

          找出含兩個g中間含有任意個字符的字符串

          # grep -n "g.*g" regular_express.txt


    \表示轉義字符,在特殊字符前加\會將本來的特殊字符意義去除

    注:{}由於在shell裏有特殊意義,因此須要加轉意符\來讓其失去意義


 12. \{m,n\}表示找出n到m個(正則表達式)前一個字符

          找出含兩個o的字符串

          # grep -n "o\{2\}"  regular_express.txt

          找出g後含2到5個o而後以g結尾的字符串

          # grep -n "go\{2,5\}g"  regular_express.txt


13. \{n,\}表示n個以上的前一個RE字符

          找出g後含2以上的o而後以g結尾的字符串

          # grep -n "go\{2,\}g"  regular_express.txt


 14. \<或\b表示詞首錨定 

          找出以"ro"字符串位於單詞首的字符串

          # grep -n "ro\<" regular_express.txt  

    

 15. \>或\b 表示詞尾錨定

          找出以"ro"字符串位於單詞尾的字符串

          # grep -n "\>ro" regular_express.txt


 egrep支持使用擴展正則表達式,與grep用法基本相同,區別在於egrep除了詞尾錨定和詞尾錨定

 時"<",">"符號要用"\"來轉意,其它符號則不用,

範例:

 1. + 表示重複一個或一個以上的前一個RE字符

      範例:egrep "go+d" regular_express.txt

      表示搜尋(god)(good)(goood)...等等字符串,o+表明[一個以上的o]

 2. ? 表示重複零個或一個的前一個RE字符

      範例:egrep go?d" regular_express.txt

      表示搜尋(gd)(god)字符串,o?表明[空的或1個o]


 3. () 表示找出羣組字符串

       範例:egrep "g(la|oo)d" regular_express.txt

       表示搜尋(glad)或(good)字符串


 4. ()+ 表示找出多個重複羣組的判別

       範例: echo "AxyzxyzxyzxyzC"|egrep "A(xyz)+C"

       表示搜尋開頭是A結尾是C,中間有一個以上的"xyz"字符串


其他用法不在詳細舉例,可模仿grep用法:


範圍匹配:

    .號表示匹配任意單個字符

    [ ]:匹配範圍內的任意單個字符

   [^ ]:匹配範圍外的任意單個字符

次數匹配:

     *:匹配任意次

     ?:匹配0次或1次

     +:匹配1次或屢次

    {m}:匹配匹配m次

    {m,n}:匹配至少m次,至多n次

    {0,n}:匹配至少0次至多無限次

    {m,}:匹配至少m次

位置匹配:

    ^ 表示行首錨定

    $ 表示行尾錨定

    \<或\b 表示詞首錨定

    \>或\b 表示詞尾錨定

相關文章
相關標籤/搜索