首页 > 代码库 > 对正则表示式及grep的总结

对正则表示式及grep的总结

                 正则表达式学习总结

 

 

什么是正则表达式

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

 

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

     1)字符匹配:

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

                    [] --> 匹配指定范围内的任意单个字符

                    [^]:取反

     2)次数匹配元字符:用于实先制动其前面的字符所能出现的次数

                    * -->任意长度,他前面的字符可出现任意次    

                    \? -->1次或0次,其前面的字符可有可无     

                    \{m\} -->m,表示他前面的字符要出现m

                    \{m,n\} -->至少m次,至多n 注:m最小为零不可省略,n无上限可省略

                     .* 任意长度的任意字符                                                                                引用用 \1

     3)位置锚定

                   ^  行首锚定  $ 行尾锚定     ^$ 空白行

                                  不包含特殊子字符的连续字符所组成的字符串:

                    \<  词首   \>  词尾        都可以用\b代替

     4)分组:\(\)

                   括号有编号:\n 引用第n个括号所匹配的内容,不是模式本身  

 

二.grep的常用选项

       -v: 反向选取

            -o : 显示被模式匹配的字串可不是整行

            -i : ignore-case,忽略大小写

            -E: 支持使用正则扩展表达式

            -A: 现实匹配到内容的前几行

            -B : 显示匹配到内容的后几行

            -C : 显示匹配到内容的前后几行

 

 

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

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

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

wKioL1PAxHSB1B43AADLzaRw13k451.jpg

 

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

wKioL1PAxIXxfNlOAABz7WAwaBk424.jpg 

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

wKiom1PAxN6iUWK7AADWnx8vVvw904.jpg

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

 wKioL1PAxg2iaT1gAADlbXfT8Po997.jpg

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

wKiom1PAxp-i9OzGAAEsShm_mCY913.jpg

6.       grep “tuser*\(.\)\3”/etc/passwd   r*表示r可以出现任意次 \.\)表示“.”被分组  \3表示分组被引用了三次wKiom1PAxtrT-6RtAAHRVHzU2RA068.jpg


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

wKioL1PAxv2Dxsn4AAHLKFbm-7Y537.jpg

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

wKiom1PAxzyyPAjCAABtKDfdQDM995.jpg

 

 

 

四.Grep的扩展egrep grep –E

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

 

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

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

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

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

 

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

wKiom1PAx0nhSmhRAAHPM9IN1YE295.jpg

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


本文若有错误我意思模糊的地方请各位指正,谢谢!

本文出自 “菜鸟前行之路” 博客,请务必保留此出处http://8381039.blog.51cto.com/8371039/1437341