'\" te .\" Copyright 1989 AT&T .\" Copyright (c) 2010, 2011, Oracle and/or its affiliates.All rights reserved. .\" Portions Copyright (c) 1992, X/Open Company Limited All Rights Reserved .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation.Original documentation from The Open Group can be obtained online at http://www.opengroup.org/bookstore/. .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation.In the following statement, the phrase "this text" refers to portions of the system documentation.Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group.In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document.The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.This notice shall appear on any product containing this material. .TH grep 1 "2011 年 2 月 9 日" "SunOS 5.11" "用户命令" .SH 名称 grep \- 在文件中搜索某个模式 .SH 用法概要 .LP .nf \fB/usr/bin/grep\fR [\fB-c\fR | \fB-l\fR | \fB-q\fR] [\fB-bhinsvw\fR] \fIlimited-regular-expression\fR [\fIfilename\fR]... .fi .LP .nf \fB/usr/xpg4/bin/grep\fR [\fB-E\fR | \fB-F\fR] [\fB-c\fR | \fB-l\fR | \fB-q\fR] [\fB-bhinsvx\fR] \fB-e\fR \fIpattern_list\fR... [\fB-f\fR \fIpattern_file\fR]... [\fIfile\fR]... .fi .LP .nf \fB/usr/xpg4/bin/grep\fR [\fB-E\fR | \fB-F\fR] [\fB-c\fR | \fB-l\fR | \fB-q\fR] [\fB-bhinsvx\fR] [\fB-e\fR \fIpattern_list\fR]... \fB-f\fR \fIpattern_file\fR... [\fIfile\fR]... .fi .LP .nf \fB/usr/xpg4/bin/grep\fR [\fB-E\fR | \fB-F\fR] [\fB-c\fR | \fB-l\fR | \fB-q\fR] [\fB-bhinsvx\fR] \fIpattern\fR [\fIfile\fR]... .fi .SH 描述 .sp .LP \fBgrep\fR 实用程序在文本文件中搜索某个模式,并输出包含该模式的所有行。它使用一种精简的不确定性算法。 .sp .LP 在 \fIpattern_list\fR 中,请慎用 \fB$\fR、\fB*\fR、\fB[\fR、\fB^\fR、\fB|\fR、\fB(\fR、\fB)\fR 和 \fB\\fR 字符,因为它们也是对 shell 具有特殊含义的字符。最安全的方法是,将整个 \fIpattern_list\fR 用单引号 \fB´\fR...\fB´\fR 括起来。 .sp .LP 如果未指定任何文件,\fBgrep\fR 将采用标准输入。通常情况下,找到的每行内容都会被复制到标准输出。如果有多个输入文件,则会在所找到的每行前面列显文件名。 .SS "/usr/bin/grep" .sp .LP \fB/usr/bin/grep\fR 实用程序使用有限的正则表达式(例如 \fBregexp\fR(5) 手册页所述的那些正则表达式)来匹配模式。 .SS "/usr/xpg4/bin/grep" .sp .LP \fB-E\fR 和 \fB-F\fR 选项会影响 \fB/usr/xpg4/bin/grep\fR 解释 \fIpattern_list\fR 的方式。如果指定了 \fB-E\fR,\fB/usr/xpg4/bin/grep\fR 会将 \fIpattern_list\fR 解释为一个完全正则表达式(有关说明,请参见 \fB-E\fR)。如果指定了 \fB-F\fR,\fBgrep\fR 会将 \fIpattern_list\fR 解释为一个固定字符串。如果两者均未指定,\fBgrep\fR 会将 \fIpattern_list\fR 解释为如 \fBregex\fR(5) 手册页所述的基本正则表达式。 .SH 选项 .sp .LP \fB/usr/bin/grep\fR 和 \fB/usr/xpg4/bin/grep\fR 均支持以下选项: .sp .ne 2 .mk .na \fB\fB-b\fR\fR .ad .RS 6n .rt 在每行前加上找到该行的块编号。这在通过上下文定位块编号时可能很有用(第一个块是 0)。 .RE .sp .ne 2 .mk .na \fB\fB-c\fR\fR .ad .RS 6n .rt 仅列显包含该模式的行计数。 .RE .sp .ne 2 .mk .na \fB\fB-h\fR\fR .ad .RS 6n .rt 防止将包含匹配行的文件名附加到该行之前。在搜索多个文件时使用。 .RE .sp .ne 2 .mk .na \fB\fB-i\fR\fR .ad .RS 6n .rt 在比较期间忽略大/小写区别。 .RE .sp .ne 2 .mk .na \fB\fB-l\fR\fR .ad .RS 6n .rt 仅列显包含匹配行的文件名,以换行符分隔。多次找到模式时不重复文件的名称。 .RE .sp .ne 2 .mk .na \fB\fB-n\fR\fR .ad .RS 6n .rt 在每行前加上该行在文件中的行号(第一行为 1)。 .RE .sp .ne 2 .mk .na \fB\fB-q\fR\fR .ad .RS 6n .rt 静默。不向标准输出写入任何内容(不考虑匹配行)。如果选择输入行,则以零状态退出。 .RE .sp .ne 2 .mk .na \fB\fB-s\fR\fR .ad .RS 6n .rt 抑制关于文件不存在或不可读的错误消息。 .RE .sp .ne 2 .mk .na \fB\fB-v\fR\fR .ad .RS 6n .rt 列显包含模式的行以外的所有行。 .RE .sp .ne 2 .mk .na \fB\fB-w\fR\fR .ad .RS 6n .rt 按照搜索由 \fB\<\fR 和 \fB\>\fR 括起的词的方式搜索表达式。 .RE .SS "/usr/xpg4/bin/grep" .sp .LP \fB/usr/xpg4/bin/grep\fR 仅支持以下选项: .sp .ne 2 .mk .na \fB\fB-e\fR \fIpattern_list\fR\fR .ad .RS 19n .rt 指定要在搜索输入内容期间使用的一个或多个模式。\fIpattern_list\fR 中的模式必须以换行符分隔。在 \fIpattern_list\fR 中使用两个相邻的换行符可以指定一个空模式。除非同时还指定了 \fB-E\fR 或 \fB-F\fR 选项,否则会将每个模式视为一个基本的正则表达式。\fBgrep\fR 接受多个 \fB-e\fR 和 \fB-f\fR 选项。在与行进行匹配时将使用所有指定的模式,但没有规定评估顺序。 .RE .sp .ne 2 .mk .na \fB\fB-E\fR\fR .ad .RS 19n .rt 使用完全正则表达式进行匹配。将指定的每个模式视为完全正则表达式。如果整个完全正则表达式模式与某个输入行匹配,则该行为匹配行。空的完全正则表达式与每个行都匹配。除 \fB\(\fR 和 \fB\)\fR 之外,每个模式都被解释为如 \fBregex\fR(5) 手册页所述的完全正则表达式,包括: .RS +4 .TP 1. 后跟 \fB+\fR 的完整正则表达式(匹配完整正则表达式的一次或多次出现)。 .RE .RS +4 .TP 2. 后跟 \fB?\fR 的完整正则表达式(匹配完整正则表达式的 0 次或 1 次出现)。 .RE .RS +4 .TP 3. 以 | 或换行符分隔且与匹配任意表达式的字符串匹配的完全正则表达式。 .RE .RS +4 .TP 4. 括在括号 \fB()\fR 内进行分组的一个完全正则表达式。 .RE 运算符的优先顺序为 \fB[ ]\fR、\fB* ? +\fR、串联、| 和换行符。 .RE .sp .ne 2 .mk .na \fB\fB-f\fR \fIpattern_file\fR\fR .ad .RS 19n .rt 从由路径名 \fIpattern_file\fR 指定的文件中读取一个或多个模式。\fIpattern_file\fR 中的各个模式以换行符终止。可在 \fIpattern_file\fR 中通过一个空行指定空模式。除非同时还指定了 \fB-E\fR 或 \fB-F\fR 选项,否则会将每个模式视为基本正则表达式。 .RE .sp .ne 2 .mk .na \fB\fB-F\fR\fR .ad .RS 19n .rt 使用固定字符串进行匹配。将指定的每个模式视为字符串而不是正则表达式。如果某个输入行以连续字节序列的形式包含了任一模式,则该行为匹配行。空字符串与每个行都匹配。有关更多信息,请参见 \fBfgrep\fR(1)。 .RE .sp .ne 2 .mk .na \fB\fB-x\fR\fR .ad .RS 19n .rt 仅将使用行中的所有字符来配置整个固定字符串或正则表达式的输入行视为匹配行。 .RE .SH 操作数 .sp .LP 支持下列操作数: .sp .ne 2 .mk .na \fB\fIfile\fR\fR .ad .RS 8n .rt 要在其中搜索模式的文件的路径名。如果未指定 \fIfile\fR 操作数,将使用标准输入。 .RE .SS "/usr/bin/grep" .sp .ne 2 .mk .na \fB\fIpattern\fR\fR .ad .RS 11n .rt 指定要在搜索输入内容期间使用的模式。 .RE .SS "/usr/xpg4/bin/grep" .sp .ne 2 .mk .na \fB\fIpattern\fR\fR .ad .RS 11n .rt 指定要在搜索输入内容期间使用的一个或多个模式。处理此操作数时会按照它指定为 \fB-e\fR \fIpattern_list\fR 时的处理方式进行处理。 .RE .SH 用法 .sp .LP 选项 \fB-c\fR、\fB-l\fR 和 \fB-q\fR 相斥。如果同时指定了这些选项,则 \fB-q\fR 会覆盖 \fB-c\fR,而后者又会覆盖 \fB-l\fR。 .sp .LP \fB-e\fR\fIpattern_list\fR 选项的作用与 \fIpattern_list\fR 操作数相同,但它在 \fIpattern_list\fR 以连字符分隔符开头时十分有用。如果将多个模式提供为不同的参数更为方便,则使用此选项也十分有用。 .sp .LP 可以接受多个 \fB-e\fR 和 \fB-f\fR 选项,并且在匹配输入文本行时,\fBgrep\fR 将使用提供给它的所有模式。请注意,计算顺序并未指定。如果某个实现找到一个作为模式的空字符串,则允许首先使用这一与每个行都匹配的模式,并实际上忽略任何其他模式。 .sp .LP \fB-q\fR 选项提供了一种方式来轻松确定一组文件中是否存在某个模式(或字符串)。搜索数个文件时,它可以增强性能(因为它能够在找到第一个匹配项时立即退出),而且让用户在选择作为参数提供的一组文件时更为省心(因为它在找到匹配项时退出并返回零,即便 \fBgrep\fR 在之前的文件操作数上检测到访问或读取错误)。 .SS "大型文件行为" .sp .LP 有关 \fBgrep\fR 遇到大于或等于 2 GB(2^31 字节)文件时行为的说明,请参见 \fBlargefile\fR(5)。 .SH 示例 .LP \fB示例 1 \fR查找某个词的所有用例 .sp .LP 要查找 “\fBPosix\fR”(不限大小写)一词在文件 \fBtext.mm\fR 中的所有用例并在写出时加上行号,请使用以下代码: .sp .in +2 .nf example% \fB/usr/bin/grep -i -n posix text.mm\fR .fi .in -2 .sp .LP \fB示例 2 \fR查找所有空行 .sp .LP 要查找标准输入中的所有空行,请使用以下代码: .sp .in +2 .nf example% \fB/usr/bin/grep ^$\fR .fi .in -2 .sp .sp .LP 或 .sp .in +2 .nf example% \fB/usr/bin/grep -v .\fR .fi .in -2 .sp .LP \fB示例 3 \fR查找包含字符串的行 .sp .LP 以下所有命令都将输出包含 \fBabc\fR 或 \fBdef\fR 或同时含有两者的所有行: .sp .in +2 .nf example% \fB/usr/xpg4/bin/grep 'abc def'\fR example% \fB/usr/xpg4/bin/grep -e 'abc def'\fR example% \fB/usr/xpg4/bin/grep -e 'abc' -e 'def'\fR example% \fB/usr/xpg4/bin/grep -E 'abc|def'\fR example% \fB/usr/xpg4/bin/grep -E -e 'abc|def'\fR example% \fB/usr/xpg4/bin/grep -E -e 'abc' -e 'def'\fR example% \fB/usr/xpg4/bin/grep -E 'abc def'\fR example% \fB/usr/xpg4/bin/grep -E -e 'abc def'\fR example% \fB/usr/xpg4/bin/grep -F -e 'abc' -e 'def'\fR example% \fB/usr/xpg4/bin/grep -F 'abc def'\fR example% \fB/usr/xpg4/bin/grep -F -e 'abc def'\fR .fi .in -2 .sp .LP \fB示例 4 \fR查找包含匹配字符串的行 .sp .LP 以下两个命令将输出与 \fBabc\fR 或 \fBdef\fR 精确匹配的所有行: .sp .in +2 .nf example% \fB/usr/xpg4/bin/grep -E '^abc$ ^def$'\fR example% \fB/usr/xpg4/bin/grep -F -x 'abc def'\fR .fi .in -2 .sp .SH 环境变量 .sp .LP 有关影响 \fBgrep\fR 执行的以下环境变量的说明,请参见 \fBenviron\fR(5):\fBLANG\fR、\fBLC_ALL\fR、\fBLC_COLLATE\fR、\fBLC_CTYPE\fR、\fBLC_MESSAGES\fR 和 \fBNLSPATH\fR。 .SH 退出状态 .sp .LP 将返回以下退出值: .sp .ne 2 .mk .na \fB\fB0\fR\fR .ad .RS 5n .rt 找到一个或多个匹配项。 .RE .sp .ne 2 .mk .na \fB\fB1\fR\fR .ad .RS 5n .rt 没有找到匹配项。 .RE .sp .ne 2 .mk .na \fB\fB2\fR\fR .ad .RS 5n .rt 语法错误或文件无法访问(即便找到了匹配项)。 .RE .SH 属性 .sp .LP 有关下列属性的说明,请参见 \fBattributes\fR(5): .SS "/usr/bin/grep" .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/core-os _ CSINot Enabled(未启用) .TE .SS "/usr/xpg4/bin/grep" .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/xopen/xcu4 _ CSIEnabled(已启用) _ 接口稳定性Committed(已确定) _ 标准请参见 \fBstandards\fR(5)。 .TE .SH 另请参见 .sp .LP \fBegrep\fR(1)、\fBfgrep\fR(1)、\fBsed\fR(1)、\fBsh\fR(1)、\fBattributes\fR(5)、\fBenviron\fR(5)、\fBlargefile\fR(5)、\fBregex\fR(5)、\fBregexp\fR(5)、\fBstandards\fR(5) .SH 附注 .SS "/usr/bin/grep" .sp .LP 行仅受可用虚拟内存大小的限制。如果某行含有嵌入的空字符,则 \fBgrep\fR 最多会匹配到第一个空字符。如果该行匹配,则会输出整行内容。 .SS "/usr/xpg4/bin/grep" .sp .LP 如果输入文件包含长度超过 \fBLINE_MAX\fR 个字节的行或包含二进制数据,则结果不确定。\fBLINE_MAX\fR 是在 \fB/usr/include/limits.h\fR 中定义的。