天天看點

正規表達式||grep的使用

    在編寫程式時,或者編寫網頁時,在處理一些不固定的字元時,我們通常會使用形如:. * ?等字元,而我們就把這稱作是正規表達式,尤其是我們在浏覽一些網站進行使用者注冊時,通常會見到對我們的帳号、密碼、郵箱等格式或複雜程度進行限制,而這一切都是正規表達式的功勞,而正規表達式在不同的環境中也是具有不同的作用的。

    在正規表達式中我們一般是将這些組成正規表達式的字元稱作“元字元”。

    在Linux下,正規表達式:

    ^PATTERN 行首錨定符,以PATTERN為行首開始

    PATTERN$ 行尾錨定符,以PATTERN為行尾結束

    \<PATTERN 詞首錨定符,以PATTERN為詞首開始的單詞

    PATTERN\> 詞尾錨定符,以PATTERN為詞尾結束的單詞

    . 比對任意單個非空字元

    * 比對此前的字元0到任意次

    .* 比對此前長度的任意字元(當正規表達式中包含能接受重複的限定符時,通

常的行為是【在使整個表達式能得到比對的前提下】比對盡可能多的字元,我們将其稱之為:貪婪模式)

    ? 比對此前的字元0次或1次

    \{m,n\} 比對之前字元至少m次至少n次(注:比對至少2次多則不限\{2,\} 比對最多5次少則不限\{0,5\} 比對5次\{5\})

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

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

    \(\) 辨別引用和分組,做引用時,在後面要使用括号中的字元時隻需輸入\n,

n辨別次表達式中的從左至右的第幾個括号;做分組作用時,是指括号中的為一組,執行共同的動作

    而在Linux中我們通常使用的文本查找工具grep、egrep、fgrep都是配合正規表達式來使用的:

    grep:基本正規表達式;

    egrep:擴充正規表達式;

    fgrep:快速搜尋全部的字元。

    grep [option] file

         --color=auto|always 指定比對到的字元所顯示的顔色

         -E    支援擴充正規表達式即:grep -E = egrep

         -v 取反

         -i 忽略大小寫

         -r 搜尋多個檔案,即:遞歸搜尋

         -B NUMBER 顯示搜尋到的行的上NUMBER行

         -A NUMBER 顯示搜尋到的行的下NUMBER行

         -C NUMBER 顯示搜尋到的行的上下NUMBER行

         -o 隻顯示比對到的内容本身,并非所在的行

    egrep 擴充正規表達式:擴充正規表達式對标準正規表達式的某些元字元進行了簡化如:

    \{m,n\} ---->  {m,n}

    \(\) ----> ()

    添加了:

    | 表示或的意思

    + 比對之前字元1次或任意次

例子:

1、搜尋以redhat為行開始的行在/etc/passwd中    #grep --color=auto "^redhat" 

/etc/passwd

2、搜尋以 :為行結尾的行在/etc/passwd中        #grep --color=auto ":$" 

3、搜尋不是以字母r開頭的單詞在/etc/passwd中    #grep --color=auto -v -o 

"\<r" /etc/passwd

4、搜尋以字母d結尾的單詞在/etc/passwd中        #grep --color=auto "d\>" 

5、搜尋形如XXX.XXX.XXX.XXX的行,X隻為數字在/tmp/test/a.txt中    #grep --

color=auto "\([[:digit:]]\{3\}\.\)\{3\}[[:digit:]]\{3\}" /tmp/test/a.txt

6、搜尋以其為附加組多于兩個使用者的組        #grep --color=auto "\(,.*\)\{2\}$" /etc/group

7、搜尋密碼永不過期的使用者            #grep --color=auto "\(.*\)\{4\}99999" /etc/shadow

相信你看過後,對正規表達式和grep已經能夠熟練使用了!

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/774305,如需轉載請自行聯系原作者

繼續閱讀