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

  grep與egrep都是基於「PATTERN」對指定的文本進行搜索 (文本處理三劍客之一)git

 grep與egrep的區別在於grep默認支持的是基本正則表達式egrep默認支持擴展的正則表達式正則表達式

 先從grep的選項提及ide

  使用格式:grep [OPTION]... PATTERN [FILE]...ui

   有如下選項:
spa

       -i, --ignore-case:忽略文本字符的大小寫regexp

       -v, --invert-match:反向匹配;最終顯示的結果是PATTERN不能成功匹配的行blog

       -C NUM, -NUM, --context=NUM:統計匹配PATTERN的全部的行數;圖片

       -o, --only-matching;關閉貪婪模式,僅顯示PATTERN匹配的內容字符串

       -q, --quiet, --silent:不輸出任何匹配結果get

       --color[=WHEN], --colour[=WHEN]:將匹配的PATTERN內容以特殊顏色高亮顯示

       -E, --extended-regexp:擴展的正則表達式,grep -E至關於egrep

       -F, --fixed-strings, --fixed-regexp:至關於fgrep

       -G, --basic-regexp:基本的正則表達式,即egrep -G至關於grep

       -p,--perl-regexp:使用PCRE(perl Common Regular Expression)引擎;

       -A NUM, --after-context=NUM:在顯示匹配PATTERN行的同時顯示其後面的NUM行

       -B NUM, --before-context=NUM:在顯示匹配PATTERN行的同時顯示其前面的NUM行

       -C NUM, -NUM, --context=NUM:在顯示匹配PATTERN行的同時顯示其先後的各NUM行

  重要的部分就是PATTERN區域,系正則表達式元字符匹配;

          字符匹配類:

       .:匹配任意單個字符

    例子:

       wKiom1jxiIvzP957AAAIyjel4V0248.png

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

    例子:wKioL1jxiTbTwLCVAAAWdOrTNQQ576.png

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

   例子:

     wKiom1jxibTDRXrgAAALY2iZUtg242.png

               下列的全部的字符集均可以放置於[]之中用於匹配單個字符;

                [:xdigit:]:全部的16進制數字

                a-z:全部的小寫字母

                A-Z: 全部的大寫字母

                0-9:全部的十進制數字

    次數匹配字符:該類字符以前的那個字符能夠出現的次數;

      *:其前面的字符能夠出現人意次(0次,1次或屢次);

   例子: 

      wKioL1jxiiqzJ4ELAAAMm-Dqhzs649.png

     \?:其前面的字符無關緊要(0次或1次)

   例子:

      wKiom1jxinjA34IyAAAJoSQG6K4093.png

     \+:其前面的字符至少出現一次(1次或屢次)

      舉例:grep 'x*y' /PATH :匹配含有y字符前面有或沒有x字符的行

     \{m\}:其前面的字符必須出現m次

   例子:

      wKioL1jxisDDzNgZAAAJNkE40ig234.png

      \{m,n\}:其前面的字符至少出現m次,至多出現n次;(m<n)

      \{,n\}:其前面的字符只收出現0次,至多出現n次

      \{m,\}:其前面的字符至少出現m次,×××;

在正則表達式中,表示任意長度任意字符的方式:.*

     位置錨定字符:

        行錨定:

            行首錨定:^

            行尾錨定:$

        字錨定:

            字首錨定:\<或\b

            字尾錨定: \>或\b

              \b:舊版本中的錨定方法,建議不使用;

    例子: 查找顯示root用戶

       wKiom1jxjHmDSNkTAAAGqxhsRCI323.png

            對於正則表達式引擎來講,字是由非特殊字符組成的字符串

     分組與引用字符:

       \(PATTERN\):將PATTERN匹配到字符做爲一個總體來處理

        例子:grep '\(xy\)\+' 文件名  匹配含有xy的行

在正則表達式引擎之中,有一系列內置變量,這些變量會保存全部分組內的字符信息,用於後向引用;這些變量一次是:\1,\2,\3,...

    pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

         \1:pattern2

         \2:pattern4

         \3:pattern5

          因此\1:第一組小括號中的pattern匹配到的字符;

            \2:第二組小括號中的pattern匹配到的字符;

              ...

      例子:找出在/etc/passwd中用戶的UID和GID相同的用戶帳戶:

  wKiom1jxjQrAJpeFAAARmKp0hPU214.png

       或:\|

       注意:\|將其左右兩遍的字符串看成總體對待

       例子:找出ifconfig命令的執行結果中數值在100-255之間的整數;

               第一位: 1 2

               第二位: 0-9 0-4 5

               第三位: 0-9 0-9 0-5

      wKiom1jxjbaTAziuAAAYM_nzcnQ147.png       那麼egrep用法就是相似與grep 只不過egrep是用的擴展的正則表達式 就是去掉「\」的元字符 

     egrep :

      egrep [OPTIONS] PATTERN [FILE...]

        擴展的正則表達式元字符:

          字符匹配:

                 .

                 []

                 [^]

          次數匹配:

                 *

                 ?

                 +

                 {m}

                 {m,n}

                 {0,n}

          位置錨定

                 ^

                 $

                 \<,\b

                 \>,\b

          分組和引用:

                ()

                 \1,\2,\3,...

             或:

                 |

相關文章
相關標籤/搜索