grep 命令

用途

在文件中搜索模式。

语法

grep[-E |-F ] [-i] [-h] [-H] [-L] [-r|-R] [-s ][-u ] [-v ] [-w ] [-x ] [-y ] [ [-b] [-n ] ]。| [-c |-l |-q ] )[-p [分隔符] ] ]{ [-e PatternList... ] [-f PatternFile... ] |PatternList ...}[文件 ... ]

描述

grep 命令用于搜索由 Pattern 参数指定的模式,并将每个匹配的行写入标准输出中。 这些模式是具有限定的正则表达式,它们使用 ed egrep 命令样式。 grep 命令使用压缩的不确定算法。

如果在文件参数中指定了多个文件名,grep命令会显示包含匹配行的文件名。 对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern 参数中时必须带双引号。 如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。 在这样的表达式中[a-z]根据当前的校对序列,"-"(减号)cml 指定一个范围。 整理顺序可以定义等价的类以供在字符范围中使用。 如果未指定任何文件,grep 会假定为标准输入。

注意:
  1. 不要对特殊文件运行 grep 命令,这样做可能产生不可预计的结果。 输入行不应包含空字符。
  2. 输入文件应该以换行符结束。
  3. 换行符不会与正则表达式匹配。
  4. 虽然可以同时指定若干标志,但有些标志会覆盖其他标志。 例如,-l 选项将优先于所有其他标志。 另外,如果您同时指定了 -E-F 标志,那么后指定的那个会有优先权。

标志

描述
-b 在每行前面加上找到该行的块号码。 使用此标志有助于按照上下文查找磁盘块号码。 -b 标志不能用于标准输入或者管道输入。
-c 仅显示匹配行的计数。
-E 将每个指定模式视作扩展的正则表达式(ERE)。 ERE 的空值将匹配所有的行。
注意:带有-E标志的grep命令与egrep命令相同,只是错误信息和使用信息不同,而且-s标志的功能也不同。
-e PatternList 指定一个或多个搜索模式。 其作用相当于一个简单模式,但在模式以 -(减号)开始的情况下,这将非常有用。 模式之间应该用换行符分隔。 连续使用两个换行符或者在引号后加上换行符 ("\n) 可以指定空模式。 除非同时指定了 -E-F 标志,否则每个模式都将被视作基本正则表达式 (BRE)。 grep 可接受多个 -e-f 标志。 在匹配行时,所有指定的模式都将被使用,但评估的顺序没有指定。
-f 将每个指定的模式视作字符串而不是正则表达式。 空字符串可匹配所有的行。
注意:带有-F标志的grep命令与fgrep命令相同,只是错误信息和使用信息不同,而且-s标志的功能也不同。
-f PatternFile 指定包含搜索模式的文件。 模式之间应该用换行符加以分隔,空行将被认为是空模式。 每种模式都将被视作基本的正则表达式 (BRE),除非同时指定了 -E-F 标志。
-h 禁止在匹配行后附加包含此行的文件的名称。 当指定多个文件时,将禁止文件名。
-h 如果指定了 -r -R 选项并且在命令行上指定了引用文件类型目录的符号链接,那么 grep 将搜索符号链接所引用的目录文件以及文件层次结构中在它以下的所有文件。
-i 在进行比较时忽略字母的大小写。
描述
-l 仅列示(一次)包含匹配行的文件的名称。 文件名之间用换行符加以分隔。 如果搜索标准输入,路径名为(StandardInput)返回。 -l 标志同 -c-n 标志的任意组合一起使用时,其作用类似于仅使用了 -l 标志。
-L 如果指定了 -r -R 选项,并且引用文件类型目录的符号链接在命令行上指定或在文件层次结构转移过程中遇到,那么 grep 将搜索符号链接所引用的目录文件以及文件层次结构中在它以下的所有文件。 如果同时指定了 -H -L,那么命令行上最近指定的选项将生效。
-n 在每一行之前放置文件中相关的行号。 每个文件的起始行号为 1,在处理每个文件时,行计数器都将被复位。
-p[分离器] 显示包含匹配行的整个段落。 段落之间将使用 Separator 参数指定的段落分隔符加以分隔,这些分隔符的模式与搜索模式有着相同的格式。 包含段落分隔符的行将仅用作分隔符;它们不会包含在输出中。 缺省的段落分隔符是空白行。
-q 禁止所有写入到标准输出的操作,不管是否为匹配行。 如果选择了输入行,那么以零状态退出。 -q 标志同 -c-l-n 标志的任意组合一起使用时,其作用类似于仅使用了 -q 标志。
-r 递归地搜索目录。 在缺省情况下,按照到目录的链接。
-R 递归地搜索目录。 在缺省情况下,不按照到目录的链接。
-s 禁止通常因为文件不存在或不可读取而写入的错误消息。 其他的错误消息并未被禁止。
-U 导致输出不被缓存。
-v 显示所有与指定模式不匹配的行。
-w 执行单词搜索。
-x 显示与指定模式精确匹配而不含其他字符的行。
-y 当进行比较时忽略字母的大小写。
PatternList 指定将在搜索中使用的一个或多个模式。 这些模式将被视作如同是使用 -e 标志指定的。
文件 指定将对其进行模式搜索的文件的名称。 如果未给出 File 变量,将使用标准输入。

退出状态

本命令返回以下退出值:

描述
重大安全事件数量 找到匹配项。
第 1 年 未找到匹配项。
>1 发现语法错误,或者文件不可访问(即使找到了匹配项)。

示例

  1. 要使用包含某些模式匹配字符 *,, ?, [, ], \(, \),\{,{, and \}模式,请输入
    grep  "^[a-zA-Z]"  pgm.s 
    这将显示pgm.s的第一个字符是字母。
  2. To display all lines that do not match a pattern, enter:
    grep   -v  "^#" pgm.s
    这将显示pgm.s的第一个字符不是#(磅号)。
  3. 要显示file1文件中与abcxyz字符串,输入
    grep   -E  "abc|xyz"  file1
  4. 要搜索一个$(的文件中的test2输入
    grep \\$ test2
    \\(双反斜线)字符是必要的,以便强制 shell 传递一个\$(单反斜线,美元符号)到grep命令。 该\(单反斜线)字符告诉grep命令处理下面的字符(在本例中为$) 作为字面字符,而不是表达字符。 如果使用 fgrep 命令,那么可以不必使用反斜杠之类的转义字符。
  5. 通过 /tmp 递归地搜索以找到含有字 IBM 的文件,而不是通过指向目录的链接进行递归搜索,请输入:
    grep –R IBM /tmp
    grep –r -H IBM /tmp
  6. 要通过 /tmp 递归地搜索以找到含有词 IBM 的文件,同时也通过链接进行递归搜索,请输入:
    grep –r IBM /tmp
    grep -R -L IBM /tmp

文件

描述
/usr/bin/grep 包含 grep 命令。