什么是正则表达式

       正则表达式,又称正规表示法常规表示法英语Regular Expression,在代码中常简写为regexregexpRE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

 

一.正则表达式的各个元字符

 
字符匹配
.表示匹配任意单个字符

[]

 匹配指定范围内的任意单个字符
[^]表示非后面的字符,[^a]即为非a的字符
            次数匹配元字符 
*他前面的字符可出现任意次
\?其前面的字符可有可无  
 \{m,n\} m表示出现的最少次数,取值范围0<=m<n,n表示出现的最多次数,可以省略
.*表示任意长度的任意字符
                    位置锚定
^锚定行首,即符号后的第一个字符必须是在行首,
$锚定行尾,符号的前一个符号必须是行的最好一个字符
\<锚定词首,符号后的第一个字符必须是一个不含特殊字符的完整单词的第一个字母
\>锚定词尾,符号的前一个单词必须是一个不含特殊字符的完整单词I的最后一个字母
\(\)对字符串进行分组,括号内的表示在一组,可以套用多个,括号是有编号的,\n表示第n个括号所匹配到的内容,而不是模式本身


    

二.grep的常用选项


-V  

反向选取,显示非正则表达式匹配的内容
-o只显示匹配到的内容 不显示全行
-C :显示匹配到内容的前后几行
-E
支持使用正则扩展表达式
-B  显示匹配到内容的后几行
-A
现实匹配到内容的前几行
-i
显示被模式匹配的字串可不是整行ignore-case,忽略大小写


          

         

三.各选项和正则表达式的配合使用

                grep [option] ...'PATTREN' FILE  --color=auto

      1.       grep –v “#” /etc/fstab   显示没有“#”的行 -v取反

初步了解正则表达式_正则表达式

 

    2.       grep –o \<user1\>/etc/passwd  user1被锚定词首词尾–o表示不显示整行

初步了解正则表达式_egrep_02 

      3.       grep –A2  “^zhengzhou\>” /etc/passwd   Zhengzhou被锚定了行首–A2表示显示下面两行

初步了解正则表达式_grep _03

     4.       grep –B2  “^zhengzhou\>” /etc/passwd   -B2表示显示上两行

 初步了解正则表达式_正则表达式_04

    5.       grep –C2  “^zhengzhou\>” /etc/passwd   -B2 表示显示上下两行

初步了解正则表达式_grep _05

   6.       grep “tuser*\(.\)\3”/etc/passwd   r*表示r可以出现任意次 \.\)表示“.”被分组  \3表示分组被引用了三次初步了解正则表达式_egrep_06


     7.       grep “\(user\).*\1” /etc/passwd  .*表示任意字符任意长度

初步了解正则表达式_grep _07

     8.       grep “b\{2,4\}” /etc/fstab  b\{2,4\} 表示b最少出现2次最多出现4次的行

初步了解正则表达式_正则表达式_08

 

 

 

四.Grep的扩展egrep grep –E

- grep 之下不支持  这两种 modifier,  egrep 则可.      

 

?: 匹配其前面的字符01次;

+: 匹配其前面的字符至少1

|:表示或关系,ab|bcb表示abbcb

):将部分内容合成一个单元组。如ab|bcb等,()的好处是可以对小组使用 + ? * 等。

 

Grep “tuser|^z” /etc/passwd  查找包含tuser或者以z开头的行

初步了解正则表达式_正则表达式_09

个人觉得需要使用egrep是可以用grep –E代替,不仅可以是用egrep的扩展功能还可以减少有出错的概率


本文还有待修改,请谅解!