[FILE …] 中可以指定多个文件
grep在每个文件中搜索PATTERNS。 PATTERNS是由换行符分隔的一个或多个模式(?),grep打印与该模式匹配的每一行。 通常,在shell命令中使用grep时,应将PATTERNS引起来。
文件“-”代表标准输入。
如果未提供FILE,则递归搜索将检查工作目录,而非递归搜索将读取标准输入。
此外,变体程序egrep,fgrep和rgrep分别与grep -E,grep -F和grep -r相同。 不建议使用这些变体,但提供这些变体是为了向后兼容。
在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:”my string”。这样做有两个原因,一是以防被误解为 shell命令,二是可以用来查找多个单词组成的字符串,例如:”jet plane”,如果不用双引号将其括起来,那么单词 plane将被误认为是一个文件,查询结果将返回”文件不存在”的错误信息。
在调用变量时,也应该使用双引号,诸如: grep ”$MYVAR”文件名,如果不这样,将
没有返回结果。
Pattern Syntax
E参数将Patterns解析为extended regular expressions (EREs)
F参数将Patterns解析为普通字符串,而不是正则表达式
G参数将Patterns解析为basic regular expressions (BREs),这是默认的
P参数将Patterns解析为Perl-compatible regular expressions (PCREs)
注意:!!!basic regular expressions (BREs)中‘?’, ‘+’, ‘{’, ‘|’, ‘(’, and ‘)’都没有特殊含义!
如下例子
注记:Pattern还是尽量使用双引号括起来,第一个有输出是因为shell语法先把?解析成了?,而第二个没有解析,第三个是推荐的写法
不使用E参数,使用BREs的话,得往特殊字符前面添加\才能作为特殊字符使用!
在默认的C语言环境中,[a-d]等效于[abcd]。 许多语言环境都按字典顺序对字符进行排序,在这些语言环境中,[a-d]通常不等同于[abcd]; 例如,它可能等效于[aBbCcDd]。 要获得括号表达式的传统解释,可以通过将LC_ALL环境变量设置为值C来使用C语言环境。
默认地表示字符集合方法如下
纯数字:[[:digit:]]或[0-9]
小写字母:[[:lower:]]或[a-z]
大写字母:[[:upper:]]或[A-Z]
大小写字母:[[:alpha:]]或[a-zA-Z]
数字加字母:[[:alnum:]]或[0-9a-zA-Z]
空白字符:[[:space:]]
标点符号:[[:punct:]]注意:!!!EREs和BREs都不支持\d,\s,\D,\S,\w,\W这种表示字符集合的方法!只支持上面讲的两种方法
大多数元字符在方括号表达式内都失去了特殊的含义。要包含 ] ,得把它放到[] 里面的第一个位置
如下例,使用x参数要求整行全部匹配,第二个命令没有输出
Matching Control
e和f参数指定patterns的来源,f参数指定从FILE中读取PATTERNS
e参数存在的意义在于
要使用 -e 选项来搜索匹配 ‘–test–’ 字符串,如果不使用 -e 选项,grep 命令会试图把 ‘–test–’ 当作自己的选项参数来解析:
grep -e ‘–test–’ 文件名
默认是区分大小写来匹配的,使用i参数来忽略大小写
反向匹配,即匹配成功的那些不输出,输出没匹配的
要求一整行全部匹配模式,可以在正则表达式中使用^和$来实现
General Output Control
抑制正常输出,而是为每个输入文件打印匹配行数
L参数抑制正常输出,而是打印那些文件内容没有匹配的文件名
l参数抑制正常输出,而是打印那些文件内容有匹配上的文件名
因此扫描文件时,在第一次匹配后就停止扫描该文件
在NUM条匹配的行之后停止读取该文件。
只打印匹配的那一部分内容,默认是打印匹配的那一行数据(这一行数据有部分内容匹配成功patterns,除非使用x参数,要求整行数据都匹配)
Output Line Prefix Control
n参数:在输出的每一行之前还输出行号(文件中行号从1开始)
b参数:打印每行输出在文件中的byte-offset(文件中byte-offset从0开始)
H参数:每行输出都打印文件名(有多个输入文件时,这是默认的)
h参数:每行输出前不打印文件名(只有一个输入文件或者只有标准输入时这是默认的)
Context Line Control
在匹配的行之后打印NUM行尾随的上下文context。
在连续的匹配组之间放置包含组分隔符(-)的行。
使用-o或–only-matching选项,此选项无效,并且会给出警告。
在匹配的行之后打印NUM行前面的上下文context。
在匹配的行之后打印NUM行上下文context。
File and Directory Selection
把二进制文件当作text文件来处理
输入文件是一个device,FIFO或者是socket时,使用ACTION来处理它
ACTION为read时,则直接当成普通文件读取,为skip时,则跳过
r和R参数都指定为递归读取文件夹里的文件,如果file参数没有指定的话,则在当前路径进行递归遍历
两者区别在于R是解引用递归(dereference recursive),对所有的软链接都会递归遍历进去,而r是只有当they are on the command line(什么意思?)时,才遍历软链接
–exclude=GLOB 跳过匹配GLOB的文件名,
BLOB中可以使用* ? […]作为通配符,可以使用\来引用它们的本义
–exclude-from=FILE 从FILE中读取BLOB,然后跳过匹配的文件
跟–exclude=GLOB相反,只处理匹配成功的那些文件
跳过匹配GLOB的文件夹