您的位置:首页 > 运维架构 > Linux

Linux入门: grep与egrep 知识总结

2013-03-06 23:34 190 查看
一、基本正则表达式:Grep的用法介绍

1、grep简介:
Grep 是一种强大的文本搜索工具,它能根据模式,搜索文本,并将符合模式的文本行显示出来。
Grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。Grep可用于shell脚本,因为grep是通过返回一个状态值来说明搜索的状态,如果搜索成功,就返回0;如果不成功,则返回1。我们利用这些返回值就可以很方便地进行一些文本处理工作。
2、grep正则表达式元字符集:
‘^grep’:
锚定行首,此字符后面的任意内容必须出现在行首。
‘grep$’:
锚定行尾,此字符前面的任意内容必须出现在行尾。
^$:
空白行
*:
匹配其前面的字符任意次
.*:
任意长度的任意字符
?:
匹配其前面的字符1次或0次
.:
匹配任意单个字符
[^]:
配指定范围外的任意单个字符
x\{m,\}
重复字符x,m次,如:’0\{5\}’匹配包含5 个0的行。
x\{m,n\}:
匹配其前面的字符x至少m次,至多n次。
2、字符集合:
[:space:]: 空白字符 [:punct:]: 标点字符
[:lower:]: 小写字符 [:upper:]: 大写字符
[:digit:]: 数字 [:alnum:]: 数字和大小写字母
[:alpha:]: 大小写字母 [:graph:]: 非空字符
3、grep命令选项:
-i,--ignore-case
忽略大小写差别
-q,--quiet
取消显示,只返回退出状态。0表示找到了匹配的行
-color
给符合条件的加上颜色
-v,--revert-match
显示没有被模式匹配的行
-o
只显示被模式匹配到的字符串
4、位置锚定:

^: 锚定行首,此字符后面的任意内容必须出现在行首。
如:grep '^root' etc/passwd
$: 锚定行尾,此字符前面的任意内容必须出现在行尾。
如:grep 'bash$' etc/passwd
^$:空白行 如: grep '^$' /etc/passwd /etc/passwd中的空白行就会被匹配

\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
如: grep "\<root" /etc/passwd
grep "root\>" /etc/passwd
5、分组
\(\)
ab*表示a后面的b可以出现0次1次或者任意次;
而分组 \(ab\)*则表示ab这个整体可以出现0次1次或者任意次
后向引用:
\1: 引用第一个左括号以及与之对应的右括号所包含的内容
\2:引用第二个左括号以及与之对应的右括号所包含的内容
例如:建立一个文档test1.txt , 内容为
(He love his lover.
She like her lover.
He like his liker.
She love her liker.)
输入 #grep ‘l..e.*l..e’ test1.txt
则 He love his lover.
She like her lover.
He like his liker.
She love her liker.
输入:#grep ‘\(l..e\).*\1’ test1.txt
则 He love his lover.
He like his liker.

二、扩展正则表达式(egrep)
1、字符匹配:
.: 匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
2、次数匹配:
*:匹配其前面的字符任意次
?:匹配其前面的的字符1次或0次
+:匹配其前面的字符至少1次
{m,n}:匹配其前面的字符至少m次,至多n次。不需要反斜杠(\)
3、位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
\<:锚定词首,其后面的任意字符必须作为单词首部出现
\>:锚定词尾,其前面的任意字符必须作为单词的尾部出现
4、分组:
():分组
\1, \2, \3, ...
或者
|: or
如:egrep 'C|cat' /test.txt 其意思是说在test.txt中查找C或cat
注: egrep = grep -E
本文出自 “哎呀妈呀!~” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: