您的位置:首页 > 其它

grep -- 一个正则表达式的执行者

2014-02-22 16:55 141 查看
简介

grep(Global Regular Expression Print)文本搜索工具。见字知义,
它是一个文本搜索工具且是一个很强大的搜索工具哦!简单解释一下就是,
根据用户指定的文本模式对目标文件进行逐行搜索,显示所匹配的内容。提
起grep我想大家一定会想到正则表达式吧!不错,grep确实和正则表达式有
着千丝万缕的关系,也可以说成是正则表达式中的一个执行者,那么grep都
有什么功能呢?它和正则表达式又有着哪些千丝万缕的关系呢?又怎么是正
则表达式的执行者呢?那么接着往下面看吧......

grep与基本正则表达式:

1、简单介绍
所谓正则表达式,简单来说就是处理字符串的方法,让用户通过一些特殊符
号的辅佐能轻易达到查找、删除、替换某特定字符串的一种处理程序。那么
它与grep又有什么关系呢?我们上面也说了grep就是一个文本搜索工具,而
正则表达式就是一个来方便用户简单、快速的查找、删除、替换某特定字符
的处理程序,而grep就是来完成这样目的的,所以可以理解为grep就是正则
表达式的一个执行者。

2、格式
grep [--color==auto] [options] ‘PATTERN’ file...
此上是grep的一个基本使用命令格式,下面我来一一介绍:
[--color=auto]带着中括号说明是可有可无的选项,它的意思就是将查找到的字符以特殊颜色显示出来
达到让用户一目了然的效果。
[options]是grep的选项,有-v,-i,-o,-E,-A,-B,-C后面会一一列出来都是什么意思。
‘PATTERN’要匹配的模式
file是要在那个文件里找这些匹配的模式,...的意思是后面可以跟多个文件。

3、选项
-i:不区分大小写
-o:仅显示被模式匹配到的字串而非正行
-n:显示出行号
-v:反向查找,显示不能被模式匹配到的行
-E:使用扩展的正则表达式
-A#:显示匹配字符的下面的第#行
-B#:显示匹配字符的上面的第#行
-C#:显示匹配字符的上、下的第#行

4、基本正则表达式
基本正则表达式元字符即grep,下面来说一下则正表达式里的特殊符号:
(1)字符匹配:
. :匹配单个任意字符
[]:指定范围内的任意字符
[0-9]或[[:digit:]]匹配0-9的任意单个数字
[a-z]或[[:lower:]]匹配a-z的任意单个小写字母
[A-Z]或[[:upper:]]匹配A-Z的任意单个大写字母
[[:alpha:]]匹配包含大小写字母
[[:alnum:]]匹配包含字母数字
[[:space:]]匹配包含空格
[[:punct:]]匹配包含标点符号
[^]:匹配指定范围外的字符
(2)次数匹配:
* :任意次(匹配*号前后相同的字符任意次,也可以是0次)
.* :匹配任意长度的字符
\? :只能匹配0次或1次
\{m\} :匹配m次
\{m,n\}:匹配至少m至多n次
\{m,\} :至少m次
\{0,n\} :至多n次
(3)锚定:
位置锚定:
^:锚定行首,^写在字符左侧(行首)
$: 锚定行尾,$写在字符右侧(行尾)
^$:查看空白行
单词锚定:
\<char:锚定词首,\<也可用\b代替,写在单词左侧
char\>:锚定词尾,\>也可用\b代替,只是写在单词的右侧
\<..>\:锚定词首词尾,只匹配中间单个单词
分组:
\(\) :将括号中的字符当作一个整体看待,注意后一个\是放在括号最后面
例:\(ab\)*xy意思就是将ab匹配任意次而非只是匹配b
引用:
\( \)*\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容在1处显示出来
例:\(a.b\)xy\1的意思就是a与b之间必须有一个字符且后面跟上xy然后在xy后面必须跟上与前面出现过
的a.b一模一样的三个字符,如:a6bxya7b就是不符合的,而a6bxya6b才是符号的

5、grep与正则表达式的结合使用:
(1)选项与字符匹配的结合使用:
例1:搜索出/etc/passwd下tmp字符并显示出行数:



例2:搜索出/tmp/fstab下以b开头t结尾中间只有两个字符且不分大小写并显示出行数


(2)选项、字符和匹配次数的结合使用:
例1:搜索出/tmp/grub.conf下至少出现过一次root并以特殊颜色显示出来



(3)选项、字符、匹配次数和锚定匹配的使用:
例1:找出/tmp/a.out下所有空白行并统计出来



例2:找出/tmp/a.out下以#开头并且后面跟的非空白字符的行



例3:找出/tmp/a.out下以s开头t结尾并且中间有四个任意字符的处于行尾的单词




egrep与扩展正则表达式:

1、egrep与扩展正则表达式的关系

扩展表达式顾名思义将基本表达式扩展补充了些内容,也算是基本正则表达
式的增强版了。而与grep一样,egrep是执行扩展表达式的也相当grep的-E
选项,那么扩展表达式都增加了那些功能特性,egrep有是怎么用的呢?那
一起往下看吧...

2、扩展正则表达式
(1)字符匹配
扩展的正则表达式与基本正则表达式的字符匹配一样都是. [] [^]用法和功能和
基本正则表达式一样,有疑问参考上面。
(2)次数匹配

* :匹配其前面的字符任意次
?:匹配其前面的字符0或1次
+ :匹配其前面的字符至少1次
{m} :匹配其前面的字符m次,做精确匹配
{m,n}:匹配其前面的字符至少m次,至多n次
{m,} : 匹配至少m次
{0,n}: 匹配至多n次
(3)锚定

位置锚定
^:行首
$:行尾
\<,\b:词首
\>,\b:词尾
分组:
():分组
前向的引用:
\1,\2
或:
|:或者
例:grep -E conC|cat 输出的是conC和cat , con(C|c)at输出的是conCat和concat

3、egrep与扩展正则表达式的使用
例1:找出/tmp/functions下出现过至少一次的yes字符不区分大小写




例2:找出/tmp/functions下前后都是shell的行



例3:找出/tmp/functions下以do结尾或者是以then结尾的行




总结grep和egrep

通过前面的介绍也明白了grep是用于基本正则表达式而egrep是用在扩展正
则表达式的,用法都很相似且grep -E = egrep 。而对于他们与正则表达式
的关系前面也已说的很明白了,说grep是一个执行者或是表达者也名副其
实了,那么grep的介绍也就到此结束了。



本文出自 “千里之行始于足下” 博客,请务必保留此出处http://shlinuxdream.blog.51cto.com/8570170/1362108
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: