正则表达式元字符集有两种版本:基本的和扩展的。正则表达式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下工作。