Linux grep

hurp_oracle發表於2015-01-18

一、基本用法
        grep是linux中很常用的一個命令,主要功能就是進行字串資料的對比,能使用正規表示式搜尋文字,並將符合使用者需求的字串列印出來。grep全稱是Global Regular Expression Print,表示全域性正規表示式版本,它的使用許可權是所有使用者。grep在資料中查詢出一個字串時,是以整行為單位來進行資料選取的。
1、命令格式
        grep [cinvs] 'patten' filename
2、主要引數
        -c:只輸出匹配行的計數。
        -i:不區分大小寫(只適用於單字元)。
        -n:顯示匹配行及行號。
        -s:不顯示不存在或無匹配文字的錯誤資訊。
        -v:顯示不包含匹配文字的所有行。

    --o: 只顯示正則匹配的文字
3、patten
        要搜尋的關鍵字或正規表示式語句,正規表示式參見後文。

4、簡單例項
        #netstat -nap|grep 80
        上面命令查詢監聽80埠的行。
        #grep -n "world" hello.txt
        查詢檔案hello.txt中含有"world"字串的行,並顯示行號。
        #grep -n "printf" main.c hello.c world.c
         在原始碼檔案main.c、hello.c和world.c中查詢呼叫了printf函式的行,並顯示行號。
        #grep -n "printf" *
        在當前目錄的所有檔案中查詢呼叫了printf函式的行,並顯示行號。也可以指定路徑,比如:/usr/local/include/*。
        #grep -r "printf" *
        在當前目錄及所有子目錄下遞迴查詢呼叫了printf函式的行,並顯示行號。
       
二、正則用法
        grep patten正規表示式主要元字元及使用如下表:

元字元

功能

例子

匹配什麼

^

錨定行的開始

/^love/

匹配所有以love開頭的行

$

錨定行的結束

/love$/

匹配所有以love 結束的行

.

匹配一個字元

/l..e/

匹配這樣的行,這些行包含這樣的字元:第一個字元是l,緊跟著兩個字元,然後是e

*

代表0個或多個先前字元

/*love/

匹配所有這樣的行,有0個或多個空格,空格後跟著love

[]

匹配字元組中的一個字元

/[Ll]ove/

匹配所有包含love或者Love的行

[^]

匹配一個不在範圍內的字元

/[^A-Z]ove/

 

<

錨定單詞的開始

匹配所有這樣的行,這些行包含以love開頭的單詞(vigrep支援這個功能)

>

錨定單詞的結束

Love>

匹配所有這樣的行,這些行包含以love結束的單詞(vigrep支援這個功能)

(..)

標記後面用到的匹配字元

/(love)able1rs/

最多可以使用9個標籤。第一個標籤是模板最左邊的部分。在本例子中,模板love儲存的標籤為1,後面的1指得就是love;本例子搜尋的是這樣的行,這些行包含這樣的字元,在Loveabel後面跟著lovers

x{m}

M次複製字元x

   

x{m,}

至少m次複製字元x

   

x{m,n}

至少m次,至多n次複製字x

   

w

文字和數字字元,[A-Za-z0-9]

Lw*e

匹配一個L字元,緊跟著0個或多個文字或數字字元,然後是e

W

同上

   

b

單詞分界線

bloveb

僅僅匹配單詞love

        簡單例項如下:
        #ls -l | grep '^a'
        透過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
        #grep 'test' d*
        顯示所有以d開頭的檔案中包含test的行。
        #grep '[a-z]\{5\}' aa
        顯示所有包含每個字串至少有5個連續小寫字元的字串的行。
        #grep 'w\(es\)t.*\1' aa
        如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(\1),找到就顯示該行。如果用egrep或grep -E,就不用"\"號進行轉義,直接寫成'w(es)t.*\1'就可以了。

三、其它家族
        grep家族除了有grep命令外,還包括egrep和fgrep。
        egrep是grep的擴充套件,支援更多的正則元字元,具體如下:

+

匹配一個或者多個先前字元

[a-z]+ove

匹配一個或者多個小寫字元且後面是ove的,

?

匹配0個或者多個先前字元

Lo?ve

匹配L後面有一個或者沒有o,然後是ve

a|b|c

匹配abc

Love|hate

匹配lovehate其中一個

()

字元組

Love(able|rs)(ov)+

匹配loveablelovers,匹配一個或多個ov

(…)(…)12

標記匹配字串

(love)ing

標籤標記出暫存器的一部分,並稍後替換模板。該模板叫做1,並可反覆引用。在表示式中最多可以使用9個這樣的標籤。例如,模板love被儲存在暫存器1中並稍後替換標籤叫做1

x{m}

重複字元X,m次,至少m,或者m次和n次之間。

   

x{m,}

     

x{m,n}

     

        fgrep是fixed grep或fast grep,它把所有的字母都看作單詞,即正則元字元不再特殊,而僅僅表示其自身的字母意思。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29446986/viewspace-1406054/,如需轉載,請註明出處,否則將追究法律責任。

相關文章