1. 程式人生 > >LINUX學習—grep和正則表示式(LINUX三劍客)

LINUX學習—grep和正則表示式(LINUX三劍客)

grep, egrep, fgrep

grep(GLOBAL RESEARCH)

是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。根據模式,搜尋文字,並將符合模式的文字行顯示出來。只能使用基本正則表示式 要使用擴充套件正則表示式需要-E
pattern: 由文字字元和正則表示式的元字元組合而成的匹配條件
語法:grep [option] pattern [FILE…]
1. Option:

    -w:只顯示全字元符合的列;  
    -i:忽略大小寫;  
    --color:將匹配到的文字加以顏色顯示;   
    -v:反向查詢,即顯示沒有被匹配的行;  
-o:只顯示被模式匹配到的字串; -E:使用擴充套件正則表示式; -A n:表示顯示匹配到的字元其後n行; -B n:表示顯示匹配到的字元其前n行; -C n:表示顯示匹配到的字元其前後各n行;

2. Pattern
正則表示式:Regular Expression, REGEXP
正則表示式是對字串操作的一種邏輯公式,即用事先定義好的一些特定字元及這些特定的字元組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。
主要是對字串(包括普通字元如a-z間的字母)和特殊字元(如元字元)進行操作的一種邏輯公式
- 元字元:

        . :匹配任意單個字元  
        [ ]:匹配指定範圍內的任意單個字元;  
        [^]: 匹配指定範圍外的任意單個字元;  
  • 字元集合:
            [:digit:]:數字  
            [:lower:]:小寫字母   
            [:upper:]:大寫字母  
            [:punct:]:標點符號  
            [:space:]:空白字元   
            [:alpha:]:所有字母  
            [:alnum:] :所有數字  
            在使用這些字元集合是還需要用[ ]將其括起來即 [[:digit:]]
  • 匹配次數(貪婪模式):

    * :匹配其前面的字元任意次;a, b, ab, aab,acb,amnb; a*b可以匹配(b,ab,aab),其他的都不行;  
    

    .* :任意長度的任意字元
    \?:匹配其前面的字元1次或0次,使用時一般需要加轉義字元\(有部分匹配就行,並不一定要求整行都匹配);
    {m.n}:匹配其前面的字元至少m次,至多n次; {1,} ; {0,3} ,沒有上限可將n省略(花括號在linux中表示展開,用\對其進行轉義)

  • 位置錨定:

    ^:錨定**行首**,此字元後面的任意內容必須出現在行首;  
    $:錨定**行尾**,次字元前面的任意內容必須出現在行尾;  
    ^$:空白行  
    

    \<或\b:其後面的任意字元必須作為單詞首部出現,錨定詞首 \

擴充套件正則表示式egrep:
  • 字元匹配:
    ./[ ]/[^]與基本正則表示式一致

  • 次數匹配:

    *:相同,匹配前面的字元任意次  
    ?:其前字元0次或1次,不用加\  
    +:匹配其前面的字元至少1次  
    {m, n}:不需要使用\   
  • 位置錨定字元都一樣:
    ^ /$/ \

    ():分組,不需要加\  
      \1, \2, \3, .....
    |:或者  a|b  表示a或者b, C|cat表示C或cat而不是Cat或cat,分組可實現Cat或cat grep -E --color '(C|c)at' file  
    +:匹配其前面的字元至少1次  
    \.:表示對元字元進行轉義,為其本身含義