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