正則表達式元字符集有兩種版本:基本的和擴展的。正則表達式grep使用的是其元字符集的基本集.egrep或者grep -E 用的是正則表達式元字符集的擴展集。Gnu grep 同時使用這兩個集。基本集包括:^ , $ , . , * ,[] ,[^] ,\<, and ,\>
另外,Gnu 將\b,\w 和\W 作爲POSIX新增的正則表達式元字符予以識別。-E 選項使得Gnu grep 能夠使用擴展集。即使在沒有—E選項的情況下,標準的grep在默認情況下也支持以反斜槓開頭的擴展正則表達式元字符集。例如:?,+ ,{}, | ,( )
前面沒有反斜槓的擴展元字符集對於標準的grep沒有特別的含義。
\ ? , \ + ,\{ , \ | ,\(, \ )
Gnu grep 的使用格式參見表、
Gnu grep
格式 | 含義 |
grep 'patten' filename(s) grep -G 'pattern' filename(s) grep -E 'pattern' filebname(s) grep -F 'pattern' filename(s) |
基本正則表達式元字符(默認) 同上 (默認) 擴展正則表達式元字符集 無正則表達式元字符集 |
表3.2 grep 的正則表達式元字符(基本集)
元字符 | 功能 | 例子 | 匹配什麼 |
^ | 錨定行的開始 | ^love | 匹配所有以love開頭的行 |
$ | 錨定行的結束 | love$ | 匹配所有以love線束的行 |
. | 匹配一個字符 | l..e | 匹配所有這樣的行,這些行包含這樣的字符,第一個字符是l,緊跟着兩個字符,然後是e |
* | 代表0個或者多個先前字符 | *love | 匹配所有這樣的行,有0個或者多個空格,空格後面跟着love |
[] | 匹配字符組中的一個字符 | [LI]ove | 匹配所有包含love或者love的行 |
[^] | 匹配一個不在範圍內的字符 | [^A-Z]ove | 匹配所有這樣的行,這些行包含如下的字符,第一個字符不是從A~Z中間的一個,後面跟着ove |
/<a | 錨定單詞的開始 | /<love | 匹配所有這樣的行,這些行包含以love開頭的單詞(vi和grep支持這個功能); |
\> | 錨定單詞的結束 | love\> | 匹配所有這樣的行,這些行包含以love結束的單詞(vi和grep支持這個功能) |
\(.\)b | 標記後面用到的匹配字符 | \(love\)able | 最多可以使用9個標籤,第一個標籤是模板最左邊的部分。在本例子中,模板love保存爲標籤l,後面的\l指的就是Love;本例子搜索的是這樣的行,這些行包含這樣的字符,在Loveable後面跟着lovers |
x\{m\} | m次複製字符x | o\{5,10\} | 匹配所有這樣的行,包含的o的數量在5-10 個之間,(vi和grep支持這個功能) |
x\(m\) | 至少m次複製字符x | o\{5,\} | |
x\{m,n\}c | 至少m次,至多n次複製字符x | o\{5,10\} | |
\w | 文字和數字字符,[A-Za-z0-9] | L\w*e | 匹配一個l字符,緊跟着0個或者多個文字或數字字符,然後是e |
\W | 同上 | love\W+ | 匹配love後面是一個或者多個非單詞字符,如點號或者問號 |
\b | 單詞分界線 | \blove\b | 僅僅匹配單詞love |
a.這些元字符必須與反斜線一起才能工作,在grep-E和Gnu egrep中也是這樣;他們在UNIX下的egrep中完全不能用。
b.這些元字符是擴展集的一部分,它們可以在UNIX下的grep和Gnu的常規grep下正常工作。如果加反斜線,在UNIX下的egrep中就不能正常工作。
c.該元字符不能被所有版本的UNIX和模板匹配實用程序支持:它們通常在vi或grep下工作,它們根本不能在UNIX的egrep下工作。