天天看點

關于grep的使用以及正規表達式

    簡單地說,正規表達式就是處理字元串的方法,它以行為機關來進行字元串的處理行為,通過一些特殊的符号的輔助,可以讓使用者輕易打到查找、删除、替換某特定字元串的處理程式。這些特殊字元稱為元字元,其不表示字元本身的意義,用于額外功能性的描述。正規表達式又分為基礎正則與擴充正則。

    1)基礎正規表達式

元字元: 

        .: 比對任意單個字元

        [char]: 比對指定範圍内的任意單個字元

        [^char]:比對指定範圍外的任意單個字元

        字元集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:],[:alnum:]

比對次數(貪婪模式):

        *: 比對其前面的字元任意次    \+:比對其前面的字元至少一次

        .*: 任意長度的任意字元       \?: 比對其前面的字元1次或0次

        \{m,n\}:比對其前面的字元至少m次,至多n次

    位置錨定:指定字元出現位置

^: 錨定行首,此字元後面的任意内容必須出現在行首

 $: 錨定行尾,此字元前面的任意内容必須出現在行尾

 ^$: 空白行

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

\>或\b: 錨定詞尾,其前面的任意字元必須作為單詞尾部出現

分組:

        \( \)    如:\(ab\)*,将ab最為一個整體比對

        \n:後向引用,引用前面的第n個左括号以及與之對應的右括号中的模式所比對到的内容

      2)擴充正規表達式  

     擴充正規表達式,與基本正規表達式的不同在于其不再需要轉譯,增加了“|”這個指令。這裡僅介紹其不同之處。      

 +: 比對其前面的字元至少1次

?: 比對其前面的字元1次或0次

{m,n}:比對其前面的字元至少m次,至多n次

        ():   分組 

        a|b:  a或者b

 二、grep的使用

作用:文本搜尋工具,根據使用者指定的“模式”對目标文本逐行進行比對檢查;列印比對到的行;其基本格式為

                              grep [OPTIONS] PATTERN [FILE...]

     [OPTIONS]: 其主要選項有        

-i:忽略大小寫--color=auto: 對比對到的文本着色顯示;

-v:顯示沒有被模式比對到的行    -o:隻顯示被模式比對到的字元串

 -E:使用擴充正規表達式          -q: 靜默模式,不輸出任何資訊;

-A #:after, 後#行             -B #: before, 前#行

-C #:context, 前後各#行

           PATTERN:由正規表達式字元及文本字元所編寫的過濾條件

    由于grep同胞的另外兩個指令,egrep相當于 grep -E,fgrep不支援正規表達式,這裡就不再說明

    三、執行個體

1、顯示/proc/meminfo檔案中以大小s開頭的行;

2、顯示/etc/passwd檔案中不以/bin/bash結尾的行;

3、顯示/etc/passwd檔案中ID号最大的使用者的使用者名;

4、如果使用者root存在,顯示其預設的shell程式;

5、找出/etc/passwd中的兩位或三位數;

6、顯示/etc/rc.d/rc.sysinit檔案中,至少以一個空白字元開頭的且後面存非空白字元的行;   

7、找出"netstat -tan"指令的結果中以'LISTEN'後跟0、1或多個空白字元結尾的行;

8、添加使用者bash、testbash、basher以及nologin(其shell為/sbin/nologin);而後找出/etc/passwd檔案中使用者名同shell名的行;

9、寫一個模式,能比對真正意義上的IP位址;(1.0.0.1--223.255.255.254)

本文轉自 夢想成大牛 51CTO部落格,原文連結:http://blog.51cto.com/yinsuifeng/1842747,如需轉載請自行聯系原作者