Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137329
  • 博文数量: 25
  • 博客积分: 389
  • 博客等级: 一等列兵
  • 技术积分: 838
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-23 14:18
文章存档

2013年(20)

2012年(5)

分类: LINUX

2012-07-09 18:37:16

正则表达式分为两类
       basic reprxp 基本正则表达式;
       extended reprxp  扩展正则表达式;
      基本正则表达式和扩展正则表达式支持的元字符不一样
基本正则表达式
    grep命令默认仅支持(basic reprxp)基本正则表达式,其全称为Galobl research Regular Expression and Printing(全局搜索正则表达式)根据我们所指定的匹配条件去逐行的搜索某一个文件的文本,并且将匹配到我们指定条件的的文本显示出来,有时候简写为regexp,里边包含了很多的元字符(表示的不是本身的意思,而是某种通配的或者是次数匹配的等等额外的其它意义),正则表达式是由元字符组成的式子,里面包含的不只是元字符。
 grep的用法
           grep [options] ‘PATTERN’ file1......
 grep的元字符:
  匹配任意单个字符;
       例:
     
  匹配其前面的字符任意次;
        例:编辑文本test,添加5行内容,分别为abc,abbc,a,ac,accccb;然
           后查找包含ac、abc、abbc的行;
     
 .*  匹配任意长度的任意字符,贪婪模式;
        例如:grep “r.*t” /etc/passwd
    
[]  指定范围内的任意单个字符;
        举例:编辑test文本,内容包括abcabbcaacaccccbAbc
              AaCdCatccccat12345672345618976下面我们来查找
              包含a、b或c任意字母范围内的行;
   
     查找包含a或A的行;
   
     查找包含catCat的行;
   
[^]  表示取反;仍以test文本为例;
     查找包含除a、b、c字母范围外的行;
   
其中grep命令仍可以用到文件名通配中的下列选项;
   [:digit:] 表示所有数字;
[:lower:] 表示所有小写字母;
[:upper:] 表示所有大写字母;
[:space:] 表示所有的空白字符;
[:alpha:] 表示所有的字母;
[:alnum:] 表示所有的字母和数字;
[:punct:] 表示所有的标点符号;
[0-9] 
   例:编辑test文本文件,增添内容1abc2456723sdcv23dc341bc,456.908!
   然后查找含有数字的行:
   
    也可以这样查询:
   
    查找含有小写字母的行:
   
    也可以这样查询:
   
   查找含有大写字母的行:
   
   也可以这样查询:
   
   查找含有空白字符的行:
   
   查找含有字母的行:
   
   也可以这样查询:
   
   查找含有字母和数字的行;
   
   也可以这样查询:
   
   查找含有标点符号的行
   
   查找不包含纯数字的行:
   
X\{m,n\}  表示X字母至少出现m次,至多出现n次;
     例:  
X\{m,\}  表示X字母至少出现m次;
   例:
X\{0,n\} 表示X字母至多出现n次;
    例: 
X\{m\} 表示X字母精确出现m次;
    例:
\?  匹配其前面的字符0次或1次;
    例:ab\?c:可以匹配abc,abbc,ac 
锚定符:
行首锚定符;
    例:
行尾锚定符;
    例:
 
^$  锚定空白行;
    例:
\<  锚定词首,也可以用\b代替,放在字符前面;
     例:
\>  锚定词尾,也可以用\b代替,放在字符后面;
     例:
 
 
分组和后向引用:
  \(\) 对字符分组引用;
  \1,\2 后向引用 \1表示引用第一组括号中匹配到字符;\2表示引用第二组括号
  中匹配到字符;例:编辑test文本,在test中添加三行,分别为:He love his
  lover.She like her liker.He love his liker.
  查找文本中lovelike并且同一句中有与其相应加r的句子;
 
grep选项
 -v  对结果取反;
   例:编辑test文本,并向文本中添加如下内容:
然后找出test文本中非空白行;
-i  忽略字母大小写;
     例:
 
-o 仅显示匹配到的字串;
     例:
-q 不输出任何信息;
      例:
-A n  匹配的行的下面多显示一行;
      例:
-B n  匹配的行的上面多显示一行;
      例:
-C n  匹配的行的上下各多显示一行;
       例:
Egrpgrep –E 扩展的正则表达式
 扩展的正则表达式元字符:
 匹配任意单个字符,与grep的用法基本相同;
         例:
 
[]  指定范围内的任意单个字符,与grep的用法基本相同;
        例:以test文本文件为例,查找包含abc中任意一个字母的行:
*  匹配其前面的字符任意次,与grep的用法基本相同;
    例:以test文本为例,然后查找包含ab*c的行;
?   匹配其前面的字符0次或1
     例:ab?c 可以匹配abc,ac
[^ ] 表示取反;
     例:查找test文本中不同时包含abc的行;
$  行尾锚定符;
       例:
() 相当于正则表达式中的\(\) ,对字符分组引用,\1,\2为后向引用;
    例:
{}  相当于正则表达式中的\{\};
   X{m,n} 表示X字母至少出现m次,至多出现n次。例:
 X{m,}  表示X字母至少出现m次;
     例:
 X{0,n} 表示X字母至多出现n次;
     例:
 X{m} 表示X字母精确出现m次;
     例:
\<  锚定词首, grep的用法相同,这里不再举例说明;
\>  锚定词尾, grep的用法相同,这里不再举例说明;
+  次数匹配,匹配其前的字符至少1次;
   例:
|  或者,二选一;
   例:(C|c)at=(Cat,cat)a|b(包含a或者b的行), C|cat=C或者cat

阅读(2134) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~