红联Linux门户
Linux帮助

Linux基本命令之grep

发布时间:2014-07-05 11:18:29来源:红联作者:velcbo
1. Grep含义:

grep是由 g/RE/p 拼起来的,其中g为global的意思,RE为regular expression的简写,p为print的意思;即grep的意思为“全局搜索正则表达式并打印该行”(grep名称起源于ex编辑器)。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

2. Grep家族:

grep家族包括grep、egrep和fgrep,其中egrep和fgrep是grep的简单变种。

egrep扩展了grep,支持更多的正则表达式元字符。

fgrep叫fixed grep或fast grep,它将所有的字符当作字面值,即正则表达式元字符不再是特殊字符。

备注:在Ubuntu13.04的GNU版本的grep上进行测试发现grep命令支持的正则表达式元字符与egrep同样。只是在使用时,grep将字符串中正则表达式的扩展字符解释为字符,而不是正则表达式的扩展元字符,除非经过转义符转义;而egrep则默认将字符串中包含的扩展字符解释为正则表达式的扩展元字符,正则表达式的元字符不需要经过转义,这才是egrep与grep真正的不同,而不是说支持的正则表达式的字符集不同。查找man命令,我们获得了确认:

-E, --extended-regexp
Interpret PATTERN as an extended regular expression (see below).

例如:可以尝试下面的句子,就知道grep与egrep的不同了

grep -E '219|216' datafile

grep '219\|216' datafile

grep '219|216' datafile

3. Grep选项:

匹配控制:

-e#指定字符串做为查找文件内容的样式。

-f#指定规则文件,其内容含有一个或多个规则样式

-i#忽略字符大小写的差别。

-v#显示不包含匹配文本的所有行。

-w#只显示全字符合的列。

输出控制:

-c#只输出匹配行的计数。

-L#列出文件内容不符合指定的样式的文件名称。

-l#列出文件内容符合指定的样式的文件名称

-n#在显示符合样式的那一行之前,标示出该行的列数编号。

-H#在显示符合样式的那一行之前,表示该行所属的文件名称。

-h #在显示符合样式的那一行之前,不标示该行所属的文件名称。

来源:Linux社区
文章评论

共有 0 条评论