熟練使用grep,egrep

1.grepegrep的簡介

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

  搜索工具,根據用戶指定的文本模式對目標文件進行逐行搜索,顯示能夠被模式匹配的行。

  egrep:egrep的命令只和grep有很小不同,使用擴展的正則表達式構建模式,egrep是grep的擴展相當於grep -E,可以支持更多的RE元字符

  注意:

      正則表達式(RE):是一類字符書寫出來的模式(Patern)

      元字符:不表示字符本身的意義,在正則表達式中用於額外功能的描述。

      模式(Pattern):文本字符和正則表達式的元字符組合而成匹配條件

2.grep的工作方式

  grep在一個或多個文件中搜索用戶指定的模式。如果模式包括空格,則必須被引用,模式後的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。

  grep的使用格式:

  grep  [OPTIONS]   PATTERN [FILE...]

  模式可以用單引號和雙引號,如果模式中要做變量替換時則必須用雙引號

  grep常用選項:

   --colour(color):匹配到的字符串以顏色顯示

     用法如下圖所示

wKioL1MLBLDDseKhAABCuBHEM78215.jpg

  -v :反向查找,即顯示沒有'搜索字符串'內容的那行

      用法 如下圖所示        

wKiom1MLBIqSwp-GAABxuwuUj58637.jpg


  -i :忽略大小寫

  用法 如下圖所示          

wKioL1MLBp6juZCCAABRr8Zf4IY175.jpg

         

                 

  -o :只顯示被模式匹配的字符串

  用法如下圖所示        

wKioL1MLBxnT4UU-AAAvsOyEvqU544.jpg

  -n :輸出行號

 用法 如下圖所示        

wKioL1MLB3CxBTZPAAA2PqfhUI4772.jpg

       

  -A #:支持匹配到的字符串所匹配的行以及下#行(#:表示數字)

  用法 如下圖所示        

wKioL1MLCFuDR2eNAABY3j8fQVw552.jpg

  -B #:顯示匹配到字符那行的前面#行

 用法如下圖所示      

wKioL1MLCDHyDmHmAABUsjmdpVk974.jpg

  -C #:顯示匹配到字符那行的前後#行

  用法 如下圖所示      

wKioL1MLCMWyhNjeAABr0oioeQ4760.jpg

  -E:支持擴展的正則表達,後面有詳細介紹

 3.基礎正則表達式元字符以及元字符使用

 字符匹配:

                    .:任意單個字符

                     

                    []:指定範圍內的任意單個字符                          

                           [0-9],[[:digit:]]

                           [a-z],[[:lower:]]

                           [A-Z],[[:upper:]]

                           [[:alpha:]]

                           [[:alnum:]]

                           [[:space:]]

                           [[:punct:]]


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


  舉例如下              

wKioL1MK_faSrHz6AABS5FEta0M930.jpg

                 

             

                 


 次數匹配:用來指定匹配其前面的字符的次數

                    *:任意次  

                    .*:匹配任意長度的任意字符

                    \?:0次或1

 舉例如下

wKioL1MK-xnRk2uIAAAyCj88YDc652.jpg



 貪婪模式:儘可能的長的去匹配字符;

                    \{m\}:匹配m

                    \{m,n\}:最少m次,最多n

                    \{m,\}:至少m;

                    \{0,n\}:至多n;

  舉例如下      

wKiom1MK_N7C6LkpAAAyy1Rv798331.jpg

 位置錨定:用於指定字符出現的位置

                    ^:錨定行首

                           ^Char

                    $:錨定行尾

                           char$

                    ^$:空白行

                    \<char:錨定詞首,\bchar

                    char\>:錨定詞尾,char\b

  舉例如下

wKiom1MK_2jzzrPBAAAz8KafNuA003.jpg

 分組

                    \(\)

                   


 引用:

                    \1:後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容

                    \2:後向引用,引用前面的二個左括號以及與之對應的右括號中的模式所匹配到的內容

                    ...

                     

 舉例如下      

wKioL1MLAyrSzwi1AAAzdUY59gw541.jpg

 綜合實例:已添加用戶bashtestbashbasher,找出當前系統上其用戶名和默認shell相同的用戶。


  舉例如下                  

wKiom1MLCv-QA3J_AABVuZ_8alA863.jpg

 在擴展的正則表達中把\(\) 寫成()\{ \} 寫成{ },另外加入了+(次數匹配),匹配其前面的字符至少出現一次,無上限、,其餘的都一樣,基本正則表達式,使用|( ){ } . ?

 都需要轉義,在擴展正則表達中不需要加\

 grep: 使用擴展正則表達來構建模式,相當於grep -E

 元字符:

 字符匹配:

                    .:任意單個字符

                    []:指定範圍內的任意單個字符

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

 次數匹配:

                    *:匹配其前面的字符任意次;

                    ?:匹配其前面的字符01次;

                    +:匹配其前面的字符至少1

                    例子如下    

 舉例如下

wKiom1MLDcSD9-G9AAA_47q-C_4441.jpg


                    {m}:匹配其前面的字符m次;

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

                    {m,}:至少m次;

                    {0,n}:至多n次;

 錨定:

                    ^:行首

                    $:行尾

                    \<,\b: 詞首

                    \>,\b:詞尾

 分組:

                    ():分組


                    |:或者,

  舉例如下

wKiom1MLEyeTLLS-AAAzSV7HKrk339.jpg

                     

 


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