Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33363
  • 博文数量: 7
  • 博客积分: 251
  • 博客等级: 二等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 20:03
文章分类
文章存档

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个或多个

  • 限定连续RE字符范围{}

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”字符串

阅读(1392) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:鸟哥私房菜学习笔记-sed命令的使用

给主人留下些什么吧!~~