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