Linux基本命令之grep


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 #在显示符合样式的那一行之前,不标示该行所属的文件名称。

相关内容