首页 > linux > grep 正则表达式及选项
2009十一月8

grep 正则表达式及选项

下周的任务要用shell来开发,今天在家好好学习一下,原来会的那点皮毛实在不敢说会。因为主要是分析日志,所以我想这个grep一定会用到的。一边看书,一边记录一下。网上虽然也有很多了。但是整理的格式并不是很好,而且这些东西还是放在自己的博客上面看着最放心不是?呵呵。

如有雷同,绝非巧合。我是抄书上的。嗯。

grep命令简介:

在ex编辑器(我没用过)中,启动ex编辑器后要查找某个字符串时,在ex的命令提示符后键入:

:/pattern/p
:/g/pattern/p

grep这个名字就由来如此。其中p的含义是print,而当g出现在pattern前面的时候,其含义是“文件中所有行”,或“执行全局替换”。

被查找的模式称作正则表达式(regular expression)因此,把pattern换成RE,于是就成了g/RE/p,grep

grep命令语法:

前面的名字由来部分已经明确告诉我们,grep的作用是在一个或多个文件中查找茉个字符模式。egrep和fgrep都只是grep的变体,这里我们不做介绍。

我们来找“男人”问一下,看一下grep的语法结构。

GREP(1) User Commands GREP(1)

NAME
grep, egrep, fgrep, rgrep – print lines matching a pattern

SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
grep searches the named input FILEs (or standard input if no files are
named, or if a single hyphen-minus (-) is given as file name) for lines
containing a match to the given PATTERN. By default, grep prints the
matching lines.

grep使用的正则表达式元字符:

正则表达式中的元字符,我之前在javascript的日志中详细介绍过。这里不再解释何为正则表达式,只让大家来看一下在grep中使用的正则表达式元字符。

元字符 功能 示例 匹配对象
^ 行首定位符 ‘^simaopig%’ 匹配所有以simaopig开头的行
$ 行尾定位符 ‘simaopig$’ 匹配所有以simaopig结尾的行
. 匹配任意一个字符 ‘s.m’ 匹配包含一个s字符,后面跟一个字符(随意),再跟一个m的行
* 匹配0或多个前一字符 ‘s*m’ 匹配包含零个或多个s字符,后面跟有一个m字符的行
[] 匹配一组字符中的任意一个 ‘[Ss]imaopig’ 匹配simaopig,或者Simaopig
[^] 匹配不在指定字符组内的字符 ‘[^a-z]imaopig’ 匹配不包含在a-z之间的字符后跟着imaopig的行,即所有aimaopig-zimaopig的行都不包含(有点绕)
\< 词首定位符 ‘\<simaopig’ 匹配以simaopig为开头的词的行,simaopigabcd也是可以的
\> 词尾定位符 ‘simaopig\>’ 匹配以simaopig为结尾的词的行,abcdsimaopig也是可以的
\(..\) 标记匹配的字符 ‘\(simaopig\)'s blog’ 标记寄存器里的一段字符,该寄存器被记作1号寄存器。以后引用这段字符时,可以使用\1来重复该模式。9个标签中最左边的是第一号。例如,模式simaopig被保存在1号寄存器里,之后用\1来引用它。
x\{m\}或x\{m,\}或x\{m,n\} 字符x的重复出现 ‘s\{5\}’,'s\{5,\}’,'s\{5,10\}’ 匹配连续出现5个s、至少5个s或5到10个s的行

grep的选项:

观其语法结构,grep有着很丰富的选项。下面的表格中我会为大家介绍其常用的选项。

选项 功能
-b 在每一行前面加上其所在的块号,根据上下文定位磁盘块时可能会用到
-c 显示匹配到的行的数目,而不是显示行的内容
-h 不显示文件名
-i 比较字符时忽略大小写的区别
-l(小写的字母L) 只列出匹配行所在文件的文件名(每个文件名只列一次),文件名之间用换行符分隔
-n 在每一行前面加上它在文件中的相对行号
-s 无声操作,即只显示报错信息,用于检查退出状态
-v 反向查找,只显示不匹配的行
-w 把表达式作为词来查找,就好像它被\<和\>夹着那样。只适用于grep(并非所有版本的grep都支持这一功能,譬如,SCO UNIX就不支持)

grep简单示例:

例如第一个表格中,我想查找所有带有simaopig的行并且显示行号,如何查找呢?

grep -n simaopig a.html
grep options

grep options

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/11/08/1610/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

5 Responses to “grep 正则表达式及选项”

  1. #1 LAONB 回复 | 引用 Post:2009-11-08 11:34

    满怀期待的来看你的小说处女作呢。 :oops:

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-11-08 11:52

    @LAONB
    呵呵,如果下周不是任务太多的话应该今天就写了。
    可是周五的时候就已经把下两周的任务给安排了。这不现在在家只能学习呢。。

    [回复]

  3. #3 小明猪 回复 | 引用 Post:2009-11-08 12:58

    啊,正则….我不是很熟….. :shock:

    [回复]

  4. #4 LAONB 回复 | 引用 Post:2009-11-09 09:09

    @simaopig
    学习好,活到老学到老。

    [回复]

  5. #5 parsifal 回复 | 引用 Post:2011-07-26 11:58

    8) 你的网站布局非常好,很喜欢这样的风格,赞!

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)