首页 > 代码库 > 对正则表示式及grep的总结
对正则表示式及grep的总结
正则表达式学习总结
什么是正则表达式
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
一.正则表达式的各个元字符
(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取反
2. grep –o “\<user1\>”/etc/passwd user1被锚定词首词尾–o表示不显示整行
3. grep –A2 “^zhengzhou\>” /etc/passwd Zhengzhou被锚定了行首–A2表示显示下面两行
4. grep –B2 “^zhengzhou\>” /etc/passwd -B2表示显示上两行
5. grep –C2 “^zhengzhou\>” /etc/passwd -B2 表示显示上下两行
6. grep “tuser*\(.\)\3”/etc/passwd r*表示r可以出现任意次 \(.\)表示“.”被分组 \3表示分组被引用了三次
7. grep “\(user\).*\1” /etc/passwd .*表示任意字符任意长度
8. grep “b\{2,4\}” /etc/fstab b\{2,4\} 表示b最少出现2次最多出现4次的行
四.Grep的扩展egrep (grep –E)
- grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.
?: 匹配其前面的字符0或1次;
+: 匹配其前面的字符至少1次
|:表示或关系,ab|bcb表示ab或bcb
():将部分内容合成一个单元组。如a(b|bc)b等,()的好处是可以对小组使用 + ? * 等。
Grep “tuser|^z” /etc/passwd 查找包含tuser或者以z开头的行
个人觉得需要使用egrep是可以用grep –E代替,不仅可以是用egrep的扩展功能还可以减少有出错的概率
本文若有错误我意思模糊的地方请各位指正,谢谢!
本文出自 “菜鸟前行之路” 博客,请务必保留此出处http://8381039.blog.51cto.com/8371039/1437341