手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

grep(1)

名称

grep - 在文件中搜索某个模式

用法概要

/usr/bin/grep [-c | -l | 
-q] [-bhinsvw] limited-regular-expression
 
     [filename]...
/usr/xpg4/bin/grep [-E | 
-F] [-c | -l | -q] [
-bhinsvx] -e pattern_list... 
     [-f pattern_file]... [
file]...
/usr/xpg4/bin/grep [-E | 
-F] [-c | -l | -q] [
-bhinsvx] 
     [-e pattern_list]... 
-f pattern_file... [file]...
/usr/xpg4/bin/grep [-E | 
-F] [-c | -l | -q] [
-bhinsvx] pattern 
     [file]...

描述

grep 实用程序在文本文件中搜索某个模式,并输出包含该模式的所有行。它使用一种精简的不确定性算法。

pattern_list 中,请慎用 $*[^|()\ 字符,因为它们也是对 shell 具有特殊含义的字符。最安全的方法是,将整个 pattern_list 用单引号 ´...´ 括起来。

如果未指定任何文件,grep 将采用标准输入。通常情况下,找到的每行内容都会被复制到标准输出。如果有多个输入文件,则会在所找到的每行前面显示文件名。

/usr/bin/grep

/usr/bin/grep 实用程序使用有限的正则表达式(例如 regexp(5) 手册页所述的那些正则表达式)来匹配模式。

/usr/xpg4/bin/grep

–E–F 选项会影响 /usr/xpg4/bin/grep 解释 pattern_list 的方式。如果指定了 –E/usr/xpg4/bin/grep 会将 pattern_list 解释为一个完全正则表达式(有关描述,请参见 –E)。如果指定了 –Fgrep 会将 pattern_list 解释为一个固定字符串。如果两者均未指定,grep 会将 pattern_list 解释为如 regex(5) 手册页所述的基本正则表达式。

选项

/usr/bin/grep/usr/xpg4/bin/grep 均支持以下选项:

–b

在每行前加上找到该行的块编号。这在通过上下文定位块编号时可能很有用(第一个块是 0)。

–c

仅显示包含该模式的行计数。

–h

防止将包含匹配行的文件名附加到该行之前。在搜索多个文件时使用。

–i

在比较期间忽略大/小写区别。

–l

仅输出包含匹配行的文件名,以换行符分隔。多次找到模式时不重复文件的名称。

–n

在每行前加上该行在文件中的行号(第一行为 1)。

–q

静默。不向标准输出写入任何内容(不考虑匹配行)。如果选择输入行,则以零状态退出。

–s

抑制关于文件不存在或不可读的错误消息。

–v

显示包含模式的行以外的所有行。

–w

按照搜索由 \<\> 括起的词的方式搜索表达式。

/usr/xpg4/bin/grep

/usr/xpg4/bin/grep 仅支持以下选项:

–e pattern_list

指定要在搜索输入内容期间使用的一个或多个模式。pattern_list 中的模式必须以换行符分隔。在 pattern_list 中使用两个相邻的换行符可以指定一个空模式。除非同时还指定了 –E–F 选项,否则会将每个模式视为一个基本的正则表达式。grep 接受多个 –e–f 选项。在与行进行匹配时将使用所有指定的模式,但没有规定评估顺序。

–E

使用完全正则表达式进行匹配。将指定的每个模式视为完全正则表达式。如果整个完全正则表达式模式与某个输入行匹配,则该行为匹配行。空的完全正则表达式与每个行都匹配。除 \(\) 之外,每个模式都被解释为如 regex(5) 手册页所述的完全正则表达式,包括:

  1. 后跟 + 的完整正则表达式(匹配完整正则表达式的一次或多次出现)。

  2. 后跟 ? 的完整正则表达式(匹配完整正则表达式的 0 次或 1 次出现)。

  3. 以 | 或换行符分隔且与匹配任意表达式的字符串匹配的完全正则表达式。

  4. 括在括号 () 内进行分组的一个完全正则表达式。

运算符的优先顺序为 [ ]* ? +、串联、| 和换行符。

–f pattern_file

从由路径名 pattern_file 指定的文件中读取一个或多个模式。pattern_file 中的各个模式以换行符终止。可在 pattern_file 中通过一个空行指定空模式。除非同时还指定了 –E–F 选项,否则会将每个模式视为基本正则表达式。

–F

使用固定字符串进行匹配。将指定的每个模式视为字符串而不是正则表达式。如果某个输入行以连续字节序列的形式包含了任一模式,则该行为匹配行。空字符串与每个行都匹配。有关更多信息,请参见 fgrep(1)

–x

仅将使用行中的所有字符来配置整个固定字符串或正则表达式的输入行视为匹配行。

操作数

支持下列操作数:

file

要在其中搜索模式的文件的路径名。如果未指定 file 操作数,将使用标准输入。

/usr/bin/grep

pattern

指定要在搜索输入内容期间使用的模式。

/usr/xpg4/bin/grep

pattern

指定要在搜索输入内容期间使用的一个或多个模式。处理此操作数时会按照它指定为 –e pattern_list 时的处理方式进行处理。

用法

选项 –c–l–q 相斥。如果同时指定了这些选项,则 –q 会覆盖 –c,而后者又会覆盖 –l

–epattern_list 选项的作用与 pattern_list 操作数相同,但它在 pattern_list 以连字符分隔符开头时十分有用。如果将多个模式提供为不同的参数更为方便,则使用此选项也十分有用。

可以接受多个 –e–f 选项,并且在匹配输入文本行时,grep 将使用提供给它的所有模式。请注意,计算顺序并未指定。如果某个实现找到一个作为模式的空字符串,则允许首先使用这一与每个行都匹配的模式,并实际上忽略任何其他模式。

–q 选项提供了一种方式来轻松确定一组文件中是否存在某个模式(或字符串)。搜索数个文件时,它可以增强性能(因为它能够在找到第一个匹配项时立即退出),而且让用户在选择作为参数提供的一组文件时更为省心(因为它在找到匹配项时退出并返回零,即便 grep 在之前的文件操作数上检测到访问或读取错误)。

大型文件行为

有关 grep 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

示例 1 查找某个词的所有用例

要查找 “Posix”(不限大小写)一词在文件 text.mm 中的所有用例并在写出时加上行号,请使用以下代码:

example% /usr/bin/grep -i -n posix text.mm
示例 2 查找所有空行

要查找标准输入中的所有空行,请使用以下代码:

example% /usr/bin/grep ^$

example% /usr/bin/grep -v .
示例 3 查找包含字符串的行

以下所有命令都将输出包含 abcdef 或同时含有两者的所有行:

example% /usr/xpg4/bin/grep 'abc
def'
example% /usr/xpg4/bin/grep -e 'abc
def'
example% /usr/xpg4/bin/grep -e 'abc' -e 'def'
example% /usr/xpg4/bin/grep -E 'abc|def'
example% /usr/xpg4/bin/grep -E -e 'abc|def'
example% /usr/xpg4/bin/grep -E -e 'abc' -e 'def'
example% /usr/xpg4/bin/grep -E 'abc
def'
example% /usr/xpg4/bin/grep -E -e 'abc
def'
example% /usr/xpg4/bin/grep -F -e 'abc' -e 'def'
example% /usr/xpg4/bin/grep -F 'abc
def'
example% /usr/xpg4/bin/grep -F -e 'abc
def'
示例 4 查找包含匹配字符串的行

以下两个命令将输出与 abcdef 精确匹配的所有行:

example% /usr/xpg4/bin/grep -E '^abc$ ^def$'
example% /usr/xpg4/bin/grep -F -x 'abc def'

环境变量

有关影响 grep 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

将返回以下退出值:

0

找到一个或多个匹配项。

1

没有找到匹配项。

2

语法错误或文件无法访问(即便找到了匹配项)。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/grep

属性类型
属性值
可用性
system/core-os
CSI
Not Enabled(未启用)

/usr/xpg4/bin/grep

属性类型
属性值
可用性
system/xopen/xcu4
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

egrep(1)fgrep(1)sed(1)sh(1)attributes(5)environ(5)largefile(5)regex(5)regexp(5)standards(5)

附注

/usr/bin/grep

行仅受可用虚拟内存大小的限制。如果某行含有嵌入的空字符,则 grep 最多会匹配到第一个空字符。如果该行匹配,则会输出整行内容。

/usr/xpg4/bin/grep

如果输入文件包含长度超过 LINE_MAX 个字节的行或包含二进制数据,则结果不确定。LINE_MAX 是在 /usr/include/limits.h 中定义的。