全部博文(93)
分类:
2009-04-04 00:08:14
正则表达式及grep 命令初解析
1.正则表达式:
什么是正则表达式?
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。
另外,可以解释为:一些特殊或不很特殊的字符串模式的集合。
二者意义相同。其主要作用就是:字符匹配和替换。
正则表达式由特殊字符以及普通字符组成,特殊字符是正则表达式规则定义的有特殊含义的字符,普通字符是除特殊字符外的所有打印和非打印字符。
2.正则表达式主要应用在GREP和SED命令中,其次结合{\\}使用在awk语言中。
3. 基本元字符集及其含义:
^----------------只匹配行首;
$----------------只匹配行尾;
*-----------------一个单字符后紧跟*,匹配0个或多个此单字符;
[]----------------匹配[]内字符,可以是一个字符,也可是字符序列。可以使用[]字符序列范围,如用[1-5]代替[12345]
\----------------用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。\可以使其失去应有意义。(其实就是转义字符或者叫脱义字符)
.-----------------匹配任意单个字符
a\{n\}-----------匹配前面a出现的次数,n为次数;
a\{n,\}m-------匹配前面a出现次数,但次数最少为n(即>=n个字符a)
a\{n,m\}-------匹配前面字符a出现的次数,次数>=n && 次数<=m
^$--------------空行
^.$-------------一个字符的行。
表7-2 经常使用的正则表达式举例
^ 行首
$ 行尾
^ [ t h e ] 以t h e开头行
[ S s ] i g n a [ l L ] 匹配单词s i g n a l、s i g n a L、
S i g n a l、S i g n a L
[Ss]igna[lL]\. 同上,但加一句点
[ m a y M A Y ] 包含m a y大写或小写字母的行
^ U S E R $ 只包含U S E R的行
[tty]$ 以t t y结尾的行
\ . 带句点的行
^ d . . x . . x . . x 用户、用户组及其他用户组成员有可执行权限的目录
^ [ ^ l ] 排除关联目录的目录列表
[ . * 0 ] 0之前或之后加任意字符
[ 0 0 0 * ] 0 0 0或更多个
[ iI] 大写或小写I
[ i I ] [ n N ] 大写或小写i或n
[ ^ $ ] 空行
[ ^ . * $ ] 匹配行中任意字符串
^ . . . . . . $ 包括6个字符的行
[a- zA-Z] 任意单字符
[ a - z ] [ a - z ] * 至少一个小写字母
[ ^ 0 - 9 \ $ ] 非数字或美元标识
[ ^ 0 - 0 A - Z a - z ] 非数字或字母
[ 1 2 3 ] 1到3中一个数字
[ D d ] e v i c e 单词d e v i c e或D e v i c e
D e . . c e 前两个字母为D e,后跟两个任意字符,最后为c e
Grep家族
Grep(全局正则表达式) 允许对文本文件进行模式查找,如果找到匹配模式,打印包含所有匹配模式的行。它支持基本正则表达式也支持扩展集。Grep有三种变形:
Grep 标准的Grep命令。重点所在;
Egrep 扩展的Grep,支持基本及扩展的正则表达式,但不支持\ q模式范围的应用,与之相对应的一些更加规范的模式
Fgrep 快速的Grep,允许查找字符串而不是一个模式。不要误解单词f a s t,实际上它与g r e p速度相当。
2.常用的g r e p选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
3. 在g r e p命令中输入字符串参数时,最好将其用双引号括起来。这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串,在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将
没有返回结果。
在调用模式匹配时,应使用单引号。
************************************************************************