grep 正则表达式及选项
下周的任务要用shell来开发,今天在家好好学习一下,原来会的那点皮毛实在不敢说会。因为主要是分析日志,所以我想这个grep一定会用到的。一边看书,一边记录一下。网上虽然也有很多了。但是整理的格式并不是很好,而且这些东西还是放在自己的博客上面看着最放心不是?呵呵。
如有雷同,绝非巧合。我是抄书上的。嗯。
grep命令简介:
在ex编辑器(我没用过)中,启动ex编辑器后要查找某个字符串时,在ex的命令提示符后键入:
:/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 patternSYNOPSIS
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 options
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/11/08/1610/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
满怀期待的来看你的小说处女作呢。
[回复]
@LAONB
呵呵,如果下周不是任务太多的话应该今天就写了。
可是周五的时候就已经把下两周的任务给安排了。这不现在在家只能学习呢。。
[回复]
啊,正则….我不是很熟….. :shock:
[回复]
@simaopig
学习好,活到老学到老。
[回复]
[回复]