关于grep,egrep以及fgrep,是我们linux服务器中常用的文本过滤工具。掌握好这三个工具并结合正则表达式,对我们日后的运维工作有很大的帮助。
1.grep,egrep,及fgrep区别。
三者的主要区别在于对正则表达式的支持不同。首先,grep支持的是标准正则表达式;而egrep及grep -e则支持的是扩展正则表达式;至于fgrep,是不支持正则表达式的,在本文也就不再赘述。但是其在速度方面,相对前面两者,就比较快了,在精确匹配是就很好用。
2.支持的常用选项
选项 |
作用 |
--color=auto |
设置语法着色(可用alias默认使用) |
-v |
反向选取 |
-o |
仅显示匹配到的字符串 |
-i |
不区分大小写 |
-E(仅grep支持) |
使用扩展正则表达式 |
-A# |
显示匹配到行及其前的#行 |
-B# |
显示匹配到行及其后的#行 |
-C# |
显示匹配到行及其前的#行和其后的#行 |
3.常用字符合集(注:可在正则表达式的字符匹配中结合[]或[^]使用)
[:digit:]所有数字
[:lower:]所有小写字母
[:upper:]所有大些字母
[:space:]空白字符
[:punct:]标点符号
[:alpha:]大写加小写字母
[:alnum:]所有字母加数字
4.标准正则表达式的元字符
(注:为了使效果更明显,已设置别名aliasgrep="grep--color=auto".所使用示例文件在文章最下方)
.:匹配任意单个字符
[root@localhost~]#grep"r..t"/etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin |
[]:匹配指定范围内的任意单个字符
[root@localhost~]#grep"r[[:alpha:]].t"/etc/passwd root:/sbin/nologin |
如上所示,[:alpha:]表示所有字母的集合,所以外边再加个[]就是所有小写字母其中的一个了。
所以在第一次匹配的v/ftp也就因为第二个不是字母而没有匹配到了.
[^]取反,也就是指定范围外的任意单个字符
[root@localhost~]#grep"r[^[:alpha:]].t"/etc/passwd ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin |
如上图,[:alpha:]表示所有字母的集合,所以外边再加个[^]就是非所有小写字母其中的一个。
所以root就匹配不到,而v/ftp就匹配到了.
*:任意其前面的字符任意次
[root@localhost~]#grep“b*c”test bc bbc abbbc |
?:匹配其前字符零次或一次
[root@localhost~]#grep"b?c"test bc bbc abbbc |
{m,n}:匹配其前面的字符至少m,至多n次
[root@localhost~]#grep"b{2,3}c"test bbbc |
{m}:匹配其前面的字符m次
[root@localhost~]#grep"b{2}c"test bbc abbbc |
{0,n}:表示匹配其前面的字符至多n此
[root@localhost~]#grep"b{0,2}c"test bbc |
{m,}:表示匹配其前面的字符至少m次
[root@localhost~]#grep"b{3,}c"test abbbc |
^:锚定每行的起始位置
[root@localhost~]#grep"^bc"test bc bbc |
$:锚定每行的结束位置
[root@localhost~]#grep"bc$"test bc |
&;:锚定词首
[root@localhost~]#grep"&;cd"test1 ab.cd.ef |
&;:锚定词尾注:不包含特殊字符组成的串叫单词
[root@localhost~]#grep"b&;"test1 ab.cd.ef |
b:等同于&;或&;,在单词左边为锚定词首,反之为锚定词尾
[root@localhost~]#grep"bcd"test1 ab.cd.ef [root@localhost~]#grep"bb"test1 ab.cd.ef |
^$:没有任何字符的空白行
[root@localhost~]#grep"^$"test1 |
():可以将一串字符串引用起来,并可以结合次数匹配使用,也可以使用n进行引用
[root@localhost~]#grep"(abc){2}"test2 abcabcabc [root@localhost~]#grep"(a.c).*1"test2 #n表示引用第n个括号匹配到的内容,而非模式本身,所以 abczzzzzzzzzzza;c就没有被匹配到 abcabcabc abczzzzzzzzzzzabc a;czzzzzzzzzzza;c |
|:或者的意思
[root@localhost~]#grep"abc|def"test3 abcef abdef abc def [root@localhost~]#grep"ab(c|d)ef"test3 #或表示其前方的字符串或后面的字符串,而非单个字符,欲匹配单个字符,可以结合()使用 abcef abdef |
5.扩展正则表达式
关于扩展正则表达式的元字符大体上和标准正则表达式是一样的,只是在一些元字符使用时,不再需要使用进行转义,只有在使用词首锚定(&;),词尾锚定(&;)以及分组的引用(n)时转义,可以使模式更加简洁,可读性也会更强.同时也可以使用+表示匹配其前面的字符至少1次。
-----------------------------------华丽的分割线--------------------------------------
附:
上述示例使用文件内容
[root@localhost~]#cattest bc bbc abbbc |
[root@localhost~]#cattest1 ab.cd.ef abcdef abde.ef |
[root@localhost~]#cattest2 abc abcabcabc abczzzzzzzzzzzabc a;czzzzzzzzzzza;c abczzzzzzzzzzza;c |
[root@localhost~]#cattest3 abcef abdef abc def |
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|