天天看點

linux grep指令詳解

grep [OPTION]...PATTERN [FILE] ...

[options]主要參數:

-c:隻輸出比對了多少次。

-i:不區分大小寫(隻适用于單字元)。

-h:查詢多檔案時不顯示檔案名。

-l:查詢多檔案時隻輸出包含比對字元的檔案名。

-n:顯示比對行及行号。

-s:不顯示不存在或無比對文本的錯誤資訊。

-v:顯示不包含比對文本的所有行。

-d:跳過對子目錄的搜尋

-r: 對子目錄也進行查找

\:忽略正規表達式中特殊字元的原有含義。

^:比對正規表達式的開始行,如:'^grep'比對所有以grep開頭的行。

$:  比對正規表達式的結束行,如'grep$'比對所有以grep結尾的行。

\<:從比對正規表達式的行開始。如'\<grep'比對包含以grep結尾的單詞的行。

[]:比對一個指定範圍内的字元,如'[Gg]rep'比對Grep和grep。需要特別留意的是,在 [] 當中『僅代表一個待搜尋的字元』

[ n1-n2 ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。

. :所有的單個字元。

* :有字元,長度可以為0。

\(..\):标記比對字元,如'(love)',love被标記為1。

\{n,m\}:意義:重複前一個字元n-m個,若為\{n\}則是重複前一個字元n次,若是 \{n,\}則是重複前一個字答n次以上

+      比對一個或多個先前的字元。如:'[a-z]+able',比對一個或多個小寫字母後跟able的串,如loveable,enable,disable等。

?      比對零個或多個先前的字元。如:'gr?p'比對gr後跟一個或沒有字元,然後是p的行。

a|b|c  比對a或b或c。如:grep|sed比對grep或sed

()     分組符号,如:love(able|rs)ov+比對loveable或lovers,比對一個或多個ov。

參數不舉例了,見名思義,下面主要練習正規表達式

1)正規表達式的運用(過濾出本機IP位址)

[root@yang1 lesson-1]# ifconfig eth0|grep 'inetaddr:'|sed 's/^.*addr:\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)  Bcast.*/\1/g'

10.0.0.29

解析:^.*           以任意字元開頭,并重複0次或多次

[0-9]\{1,3\}  重複比對0-9中的字元1次或2次或3次

\( ……\)    标記比對字元,第一個\(\)标記為1,第二個\(\)标記為2

     \1           取第1個标記中的内容

s/aa/b/g    屬于sed中的替換功能,把aa替換為b,例中把比對的一行替換為标記1中的内容

2)egrep擴充表達式運用

過濾出多個行要使用egrep

[root@yang1lesson-1]# ifconfig eth0|grep 'inet|inet6'

[root@yang1lesson-1]# ifconfig eth0|egrep 'inet|inet6'

         inet addr:10.0.0.29  Bcast:10.0.0.255  Mask:255.255.255.0

         inet6 addr:fe80::20c:29ff:fe6a:4121/64 Scope:Link

其它+? ()同理,需要使用egrep或grep -E

     本文轉自楊雲1028 51CTO部落格,原文連結:http://blog.51cto.com/yangrong/1541927,如需轉載請自行聯系原作者

繼續閱讀