2011年(7)
分类: LINUX
2011-03-07 22:36:21
基础正则表达式
以grep为例来分析正则表达式的用法,所以先熟悉下grep的基本语法,grep是以行为单位的,如果搜到某行有匹配的字符串则将整行显示出来
grep的基本语法:
grep [-acinv] ‘搜索的字符串’filename
-a:将binary档案以text档案的方式搜寻数据
-c:计算找到搜索字符串的次数
-i:忽略大小写
-n:输出行号
-v:反向选择,显示出没有‘搜索的字符串’内容的那一行
grep –n ‘t[ae]st’ filename:表示搜索tast或test两个字符串
grep –n ‘t[^ae]st’filename:[^]表示集合字符的反向选择即不匹配集合字符中的任何一个字符,这里就表示除a 和e字符外的任何一个字符
grep –n ‘t[a-z]st’ filename:其中”-”符号表示一个范围,这里表示小写字母a到小写字母z之间所有的小写字母,还有[a-zA-Z0-9]表示数字0到9和所有大小写字母
grep –n ‘^[a-z]’filename:表示行首是小写字母的那一行都列出来,^[^a-z]表示行首不是小写字母的那一行都列出来
grep –n ‘\.$’filename :表示行尾是以小数点结尾的那一行都列出来,小数点“.”是特殊字符需要用“\”来进行转义
grep –n ‘^$’filename:表示将所有空行列出来
grep –v ‘^$’filename | grep –v ‘^#’:表示将所有非空行和没有用“#”注释的行列出来
grep –n ‘g..d’ filename :表示g和d之间有连个字符,将这样的字符串所在行都列出来,. 表示绝对一个字符
grep –n ‘goo*d’filename:表示g和d之间有至少一个o字符,*表示重复0个或多个前面的RE字符
grep –n ‘g.*g’ filename:表示以g开头和以g结尾的字符串,两个g之间的字符可以为0个或多个
grep –n ‘o\{2\}’filename:表示要找到两个o的字符串,比如:good,food或则goooood
grep –n ‘o\{2,\}’filename:表示两个o以上包含两个o
grep –n ‘o\{2,5\}’filename:表示2个到5个o
注意:
ls 工具是不支持正则表达式的,所以比如要搜索文档名以a开头的文档则是ls –l a*,而结合grep则是这样的ls | grep ‘^a.*’,同时ls –l *表示任意档名的文档,另外万用字符的反向选择是[!range], 而正则表达式的反向选择是[^range]
延伸正则表达式
grep要支持这些正则表达式需要使用-E选项 如grep -E
+:重复一个或一个以上的前一个RE字符
?:零个或一个的前一个RE字符
|:用或的方式找出数个字符串 grep –En ‘gd|good’ filename
():找出群组字符串 grep –En ‘g(la|oo)d’filename:搜寻glad或good这两个字符串, grep –En ‘A(xyz)+C’filename 开头是A结尾是C中间有一个或一个以上的“xyz”字符串