搜索文件中的模式。
grep [ -E | -F ] [ -i ] [ -h ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ 文件... ]
grep 命令用于搜索由 Pattern 参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用 ed 或 egrep 命令样式。grep 命令使用压缩的不确定算法。
如果在 File 参数中指定了多个名称,grep 命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern 参数中时必须带双引号。如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep 会假定为标准输入。
注意:
- 行被限制为 2048 个字节。
- 段落(使用 -p 标志时)长度当前被限制为 5000 个字符。
- 请不要对特殊文件运行 grep 命令,这样做可能产生不可预计的结果。
- 输入行不应包含空字符。
- 输入文件应该以换行符作为结束。
- 正则表达式不会对换行符进行匹配。
- 虽然一些标志可以同时被指定,但其中的某些标志会覆盖其它标志。例如,-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 | 禁止在匹配行后附加包含此行的文件的名称。当指定多个文件时,将禁止文件名。 |
-i | 在进行比较时忽略字母的大小写。 |
此命令返回下列出口值:
0 | 找到匹配项。 |
1 | 未找到匹配项。 |
>1 | 发现语法错误,或者文件不可访问(即使找到了匹配项)。 |
grep "^[a-zA-Z]" pgm.s
这将显示 pgm.s 中第一个字符为字母的所有行。
grep \\$ test2
为了强制 shell 将 \$(单反斜杠和美元符号)传递给 grep 命令,必须要使用 \\(双反斜杠)。\(单反斜杠)字符可通知 grep 命令将其后的字符(本例中为 $)视作原义字符而不是表达式字符。如果使用 fgrep 命令,则可以不必使用反斜杠之类的转义字符。
/usr/bin/grep | 包含 grep 命令。 |
ed 命令、egrep 命令、fgrep 命令、sed 命令。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件概述』。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『输入和输出重定向概述』。
AIX 5L Version 5.2 National Language Support Guide and Reference 中的 National Language Support。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『Shell 概述』。