您的位置:首页 > 其它

grep结合正则表达式应用

2014-07-11 08:13 246 查看
grep 的应用之正则表达式
学习linux有一段时间,对于系统中最重要的命令之一,grep小有感悟.在linux中,根据条件来查找文件中的内容,是一个很频繁的操作,那么需要根据条件查找,用到正则表达式就在所难免了.
下面就来总结一下grep结合正则表达式的用法 grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
【功能说明】 用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则 grep 指令会从标准输入设备读取数据。 【参数】 u 相关参数-a或--text 不要忽略二进制的数据。-A num 除了显示匹配到的内容之外还显示该列之后的内容。 -b或--byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。-B num 除了显示符合范本样式的那一列之外,并显示该列之前的内容。 -C num 除了显示符合范本样式的那一列之外,并显示该列之前后的内容 -d<进行动作>或--directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep 指令将回报信息并停止动作。 -E 表示使用扩展正则表达式-v: 匹配到内容反向选取-o: 仅显示匹配的字串,而非字串所在的行-i: ignore-case,忽略字符大小写

了解了grep 的参数之后,我们可以小试牛刀,尝试使用grep 来查找我们想要的内容了
下面来个例子
比如,我们要查找 /etc/passwd文件中其默认shell为/bin/bash的用户;
如果不用grep我们只能查看到文件中的所有用户,而没办法过滤




各种shell类型的用户都有,显然这不符合我们的需求
那么我们使用grep来尝试一下
[root@localhost tmp]# grep '/bin/bash$' /etc/passwd




如图所示,我们得到了想要的结果

当然,这只是小试牛刀,grep要结合正则表达式使用,才更能发挥出它的巨大威力
这就涉及到了 grep之高级应用的结合拓展正则表达式的使用
扩展正则表达式:
那么正则匹配中,都有它相应的字符模式
grep能使用的匹配模式也包含如下

字符匹配:
.
[]
[^]
次数匹配:
*:任意次
?: 0次或1次
+: 至少1次;
{m}: 精确匹配m次
{m,n}: 至少m次,至多n次
{m,}
{0,n}
锚定:
^
$
\<, \b
\>, \b
^$, ^[[:space:]]*$
分组:
( ) 引用:\1, \2, \3
把这些总结起来,就是 对应的
1,匹配什么内容[范围是什么]
2,从哪里开始匹配[从哪找]
3,匹配次数[找几个]
4,找到后是否需要再次配对
这4个问题理解清楚,grep结合正则使用对于我们来说,应该就不是什么难事了
比如说我们要找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行,也就是找这个文件中定义的方法
那么方法肯定是以数字或者字母组成的,并且至少得有一个数字或者字母组成,那么我们的正则表达式就是给定的范围是数字和字符,并且后面跟着(),当然得用引用来表示
# grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions




这样我们就能很轻松的,能得到我们想要的结果了

本文出自 “909是个目标” 博客,请务必保留此出处http://robert1joy.blog.51cto.com/4489523/1436916
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: