果要用grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串呢?从
这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息:
字符类(Character Class):如上例的x和y,它们在模式中表示一个字符,但是取值范围是
一类字符中的任意一个。
数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个x字符,IP地址的每一部
字符 含义 举例
. 匹配任意一个字符 abc. 可以匹配abcd 、abc9 等
[] 匹配括号中的任意一个字符 [abc]d可以匹配ad 、bd 或cd
[[:xxx:]] [0-9a-fA-F] 可以匹配一位十六进制数字
grep 工具预定义的一些命名字符 [[:alpha:]]匹配一个字
类母,[[:digit:]]匹配一个数字
表 32.2. 数量限定符
字符 含义 举例
* 紧跟在它前面的单元 zA-Z_]+[a-zA-Z_0-9]* 匹配C语言的标识符
应匹配零次或多次
{N} 紧跟在它前面的单元
应精确匹配N次
式中是一个特殊字符,所以需要用\转义一下,取字面
值
{N,} 应匹配至少N次
{,M} 紧跟在它前面的单元
应匹配最多M次
{N,M} 紧跟在它前面的单元
应匹配至少N次,最
多M次
表 32.3. 位置限定符
字符 含义 举例
^ 匹配行首的位置 ^Content 匹配位于一行开头的Content
$ 匹配行末的位置
;$ 匹配位于一行结尾的;号,^$ 匹配空行
\< 匹配单词开头的位置
\<th 匹配... this ,但不匹配ethernet 、tenth
\> 匹配单词结尾的位置
p\> 匹配leap ... ,但不匹配parent、sleepy
\b 匹配单词开头或结尾的位置
\bat\b匹配... at ... ,但不匹
配cat 、atexit、batch
\B 匹配非单词开头和结尾的位 \Bat\B匹配battery,但不匹配... attend、hat
...
这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息:
字符类(Character Class):如上例的x和y,它们在模式中表示一个字符,但是取值范围是
一类字符中的任意一个。
数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个x字符,IP地址的每一部
分可以有1-3个y字符各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,
用普通字符@和.隔开,IP地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述。
为了表示位置关系,还有位置限定符(Anchor)的概念
字符 含义 举例
. 匹配任意一个字符 abc. 可以匹配abcd 、abc9 等
[] 匹配括号中的任意一个字符 [abc]d可以匹配ad 、bd 或cd
- 在[]括号内表示字符范围
^ [^xy] 匹配除xy 之外的任一字符,因 位于[]括号内的开头,匹配除括
[[:xxx:]] [0-9a-fA-F] 可以匹配一位十六进制数字
grep 工具预定义的一些命名字符 [[:alpha:]]匹配一个字
类母,[[:digit:]]匹配一个数字
表 32.2. 数量限定符
字符 含义 举例
? 紧跟在它前面的单元 [0-9]?\.[0-9] 匹配0.0 、2.3 、.5 等,由于.在正则表达
+ 紧跟在它前面的单元 [a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-
应匹配零次或一次 应匹配一次或多次 ]+ 匹配email地址* 紧跟在它前面的单元 zA-Z_]+[a-zA-Z_0-9]* 匹配C语言的标识符
应匹配零次或多次
{N} 紧跟在它前面的单元
应精确匹配N次
式中是一个特殊字符,所以需要用\转义一下,取字面
值
{N,} 应匹配至少N次
{,M} 紧跟在它前面的单元
应匹配最多M次
{N,M} 紧跟在它前面的单元
应匹配至少N次,最
多M次
表 32.3. 位置限定符
字符 含义 举例
^ 匹配行首的位置 ^Content 匹配位于一行开头的Content
$ 匹配行末的位置
;$ 匹配位于一行结尾的;号,^$ 匹配空行
\< 匹配单词开头的位置
\<th 匹配... this ,但不匹配ethernet 、tenth
\> 匹配单词结尾的位置
p\> 匹配leap ... ,但不匹配parent、sleepy
\b 匹配单词开头或结尾的位置
\bat\b匹配... at ... ,但不匹
配cat 、atexit、batch
\B 匹配非单词开头和结尾的位 \Bat\B匹配battery,但不匹配... attend、hat
...