readread ,意味如果输入文件是一个目录,使用动作 ACTION 来处理它。默认情况下,动作 ACTION 是 read着目录将视为普通文件那样来读。如果动作 ACTION 是 skipskipskip ,将不处理而直接跳过目录。如果动作 ACTION 是 recurserecurserecurse , grepgrepgrep 将递归地读每一目录下的所有文件。这样做和 --r 选项等价。 -E, ------extendedextendedextended--regexpregexp 将模式 PATTERN 作为一个扩展的正则表达式来解释 (参见下面)。 -e PATTERN, --regexp=PATTERN 使用模式 PATTERN 作为模式;在保护以 -- 为起始的模式时有用。 -F, ------fixedfixedfixed--stringsstrings 将模式 PATTERN 视为一个固定的字符串的列表,用新行 (newlines) 分隔,只要匹配其中之一即可。 ----perlperlperl--regexpregexp -P, --将模式 PATTERN 作为一个 Perl 正则表达式来解释。 -f FILE, --file=FILE 从文件 FILE 中获取模式,每行一个。空文件含有0个模式,因此不匹配任何东西。 -G, ------basicbasicbasic--regexpregexp 将模式 PATTERN 作为一个基本的正则表达式 (参见下面) 来解释。这是默认值。 -H, ------withwithwith--filenamefilename 为每个匹配打印文件名。 -h, ------nonono--filenamefilename 当搜索多个文件时,禁止在输出的前面加上文件名前缀。 ----helphelphelp 输出一个简短的帮助信息。 -I 处理一个二进制文件,但是认为它不包含匹配的内容。这和 ------binarybinarybinary--files=withoutfiles=without--matchmatch 选项等价。 -i, ------ignoreignoreignore--casecase 忽略模式 PATTERN 和输入文件中的大小写的分别。 -L, ------filesfilesfiles--withoutwithout--matchmatch 禁止通常的输出;作为替代,打印出每个在通常情况下不会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止。 -l, ------filesfilesfiles--withwith--matchesmatches 禁止通常的输出;作为替代,打印出每个在通常情况下会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止。 -m NUM, --max-count=NUM 在找到 NUM 个匹配的行之后,不再读这个文件。如果输入是来自一个普通文件的标准输入,并且已经输出了 NUM 个匹配的行, grepgrepgrep 保证标准输入被定位于退出时的最后一次匹配的行之后,不管是否指定了要输出紧随的下文的行。这样可以使一个调用程序恢复搜索。当 grepgrepgrep 在 NUM 个匹配的行之后停止,它会输出任何紧随的下文的行。当使用了 --c 或 ------countcountcount 选项的时候, grepgrepgrep 不会输出比 NUM 更多的行。当指定了 --v 或 ------invertinvertinvert--matchmatch 选项的时候, grepgrepgrep 会在输出 NUM 个不匹配的行之后停止。 ----mmapmmapmmap 如果可能的话,使用 mmap(2) 系统调用来读取输入,而不是默认的 read(2) 系统调用。在一些情况下, ------mmapmmapmmap 提供较好的性能。但是,如果一个输入文件在 grepgrepgrep 正在操作时大小发生变化,或者如果发生了一个 I/O 错误, ------mmapmmapmmap 可能导致不可知的行为 (包括core dumps)。 -n, ------linelineline--numbernumber 在输出的每行前面加上它所在的文件中它的行号。 -o, ------onlyonlyonly--matchingmatching 只显示匹配的行中与 PATTERN 相匹配的部分。 ----label=label=LABEL 将实际上来自标准输入的输入视为来自输入文件 LABEL 。这对于 zgrep 这样的工具非常有用,例如: gzip gzip gzip --cd foo.gz |grep cd foo.gz |grep ------label=foo somethinglabel=foo somethinglabel=foo something ----linelineline--bufferingbuffering 使用行缓冲,it can be a performance penality. -q, ------quietquietquiet, ------silentsilentsilent 安静。不向标准输出写任何东西。如果找到任何匹配的内容就立即以状态值 0 退出,即使检测到了错误。参见 --s 或 ------nonono--messagesmessages 选项。 -r, ------recursiverecursiverecursive -R, -递归地读每一目录下的所有文件。这样做和 --d recursed recurse 选项等价。 --include=PATTERN 仅仅在搜索匹配 PATTERN 的文件时在目录中递归搜索。 --exclude=PATTERN 在目录中递归搜索,但是跳过匹配 PATTERN 的文件。 -s, ------nonono--messagesmessages
禁止输出关于文件不存在或不可读的错误信息。对于可移植性需要注意:与 GNU grepgrepgrep 不同,传统的 grepgrep 不遵守 POSIX.2 规范,因为传统的 grepgrepgrep 缺少一个 --q 选项,而它的 --s 选项与 GNU grepgrepgrep 的 -q 选项行为相似。需要可移植到传统 grepgrepgrep 的 shell 脚本应当避免使用 --q 和 --s 选项,而应当将输出重定向到 /dev/null 。 -U, ------binarybinarybinary
将文件视为二进制。默认情况下,在 MS-DOS 和 MS-Windows 系统中, grepgrepgrep 通过从文件中读取头部
grepgrep 判断文件是一个文本文件,它将原始文件内容中的 的 32kB 内容来判断它的文件类型。如果 grep
CR 字符去除 (使得含有 ^^ 和 $$ 的正则表达式可以正常工作)。指定 --U 将不进行这些工作,而使所有文件保持不变地读取并传递给匹配机制。如果文件是一个以 CR/LF 换行的文本文件,这样作将导致一些正则表达式失败。这个选项在 MS-DOS 和 MS-Windows 之外的系统中无效。 ----unixunixunix--bytebyte--offsetsoffsets -u, --报告 Unix 风格的字节偏移量。这个开关使得 grepgrepgrep 报告字节偏移量时,将文件作为 Unix 风格的文本文件看待,也就是说将 CR 字符去掉。这将产生与在一台 Unix 主机上运行 grepgrepgrep 完全相同的结
-b 选项,否则这个选项无效。这个选项在 MS-DOS 和 MS-Windows 之外的系统中果。除非同时使用 -无效。
----versionversionversion -V, --向标准错误输出打印 grepgrepgrep 的版本号。版本号应当包含在所有的 bug 报告中 (参见下面)。 ----invertinvertinvert--matchmatch -v, --改变匹配的意义,只选择不匹配的行。 ----wordwordword--regexpregexp -w, --只选择含有能组成完整的词的匹配的行。判断方法是匹配的子字符串必须是一行的开始,或者是在一个不可能是词的组成的字符之后。与此相似,它必须是一行的结束,或者是在一个不可能是词的组成的字符之前。词的组成字符是字母,数字,还有下划线。 ----linelineline--regexpregexp -x, --只选择能匹配完整一行的匹配。 -y
-i 的同义词,废弃不用。 -Z, ------nullnullnull
NULNUL 字符) 而不是一般情况下输出在文件名之后的字符。例如, 输出一个全零字节 (ASCII 码中的 NUL
grep grep --lZlZ 在每个文件名之后输出一个全零字节而不是普通的新行符。这个选项使得输出清楚明白,即使文件名的表示中包含特殊字符比如新行符。这个选项可以与命令 find find find --print0print0, perl perl perl --0, sort sort --z, 和 xargs xargs xargs --0 一起使用,来处理任意的文件名,即使是那些含有新行符的文件名。
正则表达式 REGULAR EXPRESSIONSREGULAR EXPRESSIONSREGULAR EXPRESSIONS
一个正则表达式是一个描述了一个字符串集合的模式。正则表达式的构造类似于算术表达式,使用各种各样的操作符来将更小的表达式连在一起。
grepgrep 中,两种语法GrepGrep 能理解两种不同版本的正则表达式语法:``basic'' 和 ``extended''。在 GNU grep
可以实现的功能是没有区别的。在其他实现中,基本 (basic) 正则表达式表达能力要弱一点。下面的描述适用于扩展的 (extended) 正则表达式,它与基本正则表达式的区别会在最后做一个总结。
基本的构造块是匹配单个字符的正则表达式。大部分字符,包括所有字母和数字,是匹配它们自身的正则表达式。任何具有特殊含义的元字符可以通过前置一个反斜杠来引用。(may be quoted by preceding it with a backslash.)
方括号表达式 (bracket) 是一个字符序列,放在 [[ 和 ]] 当中。它匹配序列中的任何一个字符;如果序列中的第一个字符是脱字符 (caret) ^^ 那么它匹配 不在 序列中的任何一个字符。例如,正则表达式 [0123456789]0123456789] 匹配任何一个数字。
在方括号表达式之中,一个 范围表达式 (range) 由两个字符组成,中间用一个连字符 (hyphen) 分隔。它匹配在这两个字符之间的任何一个字符,使用本地化的序列顺序和字符集。(that sorts between the two characters,inclusive, using the locale's collating sequence and character set.) 例如,在默认的
[a-d]d] 与 [[abcd]abcd] 等价。典型的,许多 locale 将字符以字典顺序排序,在这些 locale C locale中, [
中, [[a-d]d] 不与 [[abcd]abcd] 等价;例如它可能与 [[aBbCcDd]aBbCcDd] 等价。要获得传统的对方括号表达式的解释,可以设定环境变量 LC_ALLLC_ALLLC_ALL 值为 CC 来使用 locale C 。 [:[:alnum:]alnum:]最后,在方括号表达式中有一些预定义的字符类,如下所示。它们的名字是自说明的,它们是 [:
(字母和数字), [:[:[:alpha:]alpha:]alpha:](字母), [:[:[:cntrl:]cntrl:]cntrl:](), [:digit:][:digit:][:digit:](数字), [:[:[:graph:]graph:]graph:](), [:lower:][:lower:][:lower:](小写字母), [:[:[:print:]print:]print:](可打印字符), [:[:[:punct:]punct:]punct:](), [:space:][:space:][:space:](空格), [:[:[:upper:]upper:]upper:](大写字母), 和 [:[:xdigit:]xdigit:]xdigit:] 。例如, [[:[[:[[:alnum:]]alnum:]]alnum:]] 意思是 [[0-9A9A--ZaZa--z]z] ,但是后一种表示方法依赖于 locale C 和ASCII 字符编码,而前一种是与 locale 和字符集无关的。(注意这些字符类名中的方括号也是符号名称的一部分,必须包含在用来为序列定界的方括号之中。)
] ,需要将它放大多数元字符处于序列中时会失去它们的特殊意义。为了包含一个字面意义 (literal) 的 ]
^ ,需要将它放在除了序列最前之外的其在序列的最前。与此相似,为了包含一个字面意义 (literal) 的 ^
他位置。最后,为了包含一个字面意义 (literal) 的 -- ,需要将它放在序列最后。 句点符 (period) .. 匹配任何一个字符。符号 \\\\w 是 [[:[[:[[:alnum:]]alnum:]]alnum:]] 的同义词, \\\\W 是 [^[:[^[:[^[:alnum]]alnum]]alnum]] 的同义词。
^ 和美元标记 (dollar) $$ 分别是匹配一行的首部和尾部的空字串的元字符。符号 \\<\\<\\< 和 脱字符 (caret) ^
\\>\\> 分别是匹配一个词的首部和尾部的空字串的元字符。符号 \\\\b 匹配一个词边缘 (edge) 的空字串,符号 \\B 匹配 不 处于一个词的边缘的空字串。
一个正则表达式后面可以跟随多种重复操作符之一。 ? 先前的项是可选的,最多匹配一次。 * 先前的项可以匹配零次或多次。 + 先前的项可以匹配一次或多次。 {n} 先前的项将匹配恰好 n 次。 {n,},} 先前的项可以匹配 n 或更多次。 {n,m}
先前的项将匹配至少 n 词,但是不会超过 m 次。
两个正则表达式可以连接到一起;得出的正则表达式可以匹配任何由两个分别匹配连接前的子表达式的子字符串连接而成的字符串。
| 联合到一起,得出的正则表达式可以匹配任何匹配联合前的任何一个两个正则表达式可以用中缀操作符 |
子表达式的字符串。
重复操作符的优先级比连接高,接下来又比选择的优先级高。一个完整的子表达式可以用圆括号 (parentheses) 括住来超越这些优先级规则。(to override these precedence rules.)
\\n 中, n 是一个数字,匹配正则表达式中,以第 n 个圆括号括住的子表达式已匹配的子字符反向引用 \\
串。
在基本正则表达式中,元字符 ??, ++, {{, ||, ((, 和 )) 丧失了它们的特殊意义;作为替代,使用加反斜杠的 (backslash) 版本 \\?\\?\\?, \\+\\+\\+, \\{\\{\\{, \\|\\|\\|, \\(\\(\\(, 和 \\)\\)\\) 。 egrepegrep 不支持元字符 {{ ,并且一些 egrepegrepegrep 的实现通过支持 \\{\\{\\{ 来代替它,因此可移植的脚本应传统的 egrep当避免在 egrepegrepegrep 中使用 {{ 模式,应当使用 [{][{][{] 来匹配一个字面意义 (literal) 的 {{ 。
GNU egrepegrepegrep 通过假设如果 {{ 处于 an invalid interval specification 的起始,就不是一个特殊字符,
来支持传统的用法。例如,shell 命令 egrep '{1'egrep '{1'egrep '{1' 将会搜索这个两字符的字符串 {{1 而不是报告在正则表达式中发生了语法错误。POSIX.2 允许这个行为,将其视为一个扩展,但是可移植的脚本应当避免使用它。
环境变量 ENVIRONMENT VARIABLESENVIRONMENT VARIABLESENVIRONMENT VARIABLES
GrepGrep 的行为受下列环境变量影响。
一个 locale LC_LC_foo 是通过按下面的顺序, LC_ALLLC_ALLLC_ALL, LC_LC_foo, LANGLANGLANG, 检查这三个环境变量的取值而确定
LC_ALLLC_ALL 没有设置,但是 LC_MESSAGESLC_MESSAGESLC_MESSAGES 设置为 的。设置了的第一个变量指定了 locale。例如,如果 LC_ALL
pt_BRpt_BR ,那么巴西的葡萄牙语 (Brazilian Portuguese) 将用作 LC_MESSAGESLC_MESSAGESLC_MESSAGES locale 的值。如果没有设置这其中任何一个环境变量,或者没有安装所设置的 locale 目录,或者如果 grepgrepgrep 没有将国家和语言支持 (national language support (NLS)) 编译在内,将默认使用 locale C。
GREP_OPTIONSGREP_OPTIONS 这个变量指定了将放在所有显式指定的选项之前的默认选项。例如,如果 GREP_OPTIONSGREP_OPTIONSGREP_OPTIONS 是 ''--binarybinary--files=withoutfiles=without--match match ------directories=skip'directories=skip'directories=skip' 的话, grepgrepgrep 将像已经在任何显式指定的选项之前指定了 ------binarybinarybinary--files=withoutfiles=without--matchmatch 和 ------directories=skipdirectories=skipdirectories=skip 选项那样来运作。选项以空白 (whitespace) 分隔。一个反斜杠 (backslash) 使得下一个字符转义 (escape),因此可以用来指定一个含有空白或者反斜杠的选项。 GREP_COLORGREP_COLOR 指定用来高亮显示的标记。 LC_COLLATELC_COLLATE, LANGLANGLANG LC_ALLLC_ALL, LC_COLLATE这些变量指定了 locale LC_COLLATELC_COLLATELC_COLLATE ,决定了解释类似 [[a-z]z] 的范围表达式时的序列顺序 (collating sequence) 。 LC_ALLLC_ALL, LC_CTYPELC_CTYPELC_CTYPE, LANGLANGLANG 这些选项指定了 locale LC_CTYPELC_CTYPELC_CTYPE ,决定了字符的类型,例如,哪些字符是空白 (whitespace) 。 LC_ALLLC_ALL, LC_MESSAGESLC_MESSAGESLC_MESSAGES, LANGLANGLANG 这些选项指定了 locale LC_MESSAGESLC_MESSAGESLC_MESSAGES ,决定了 grepgrepgrep 的消息使用的语言。默认的 locale C 使用美国英语的消息。 POSIXLY_CORRECTPOSIXLY_CORRECT 如果设置了的话, grepgrepgrep 将像 POSIX.2 要求的那样来运作;否则, grepgrepgrep 将像其他 GNU 程序一样来运作。POSIX.2 要求文件名之后的选项必须视为文件名;默认情况下,这些选项被交换到操作数列表的前面,被当作选项来处理。同时, POSIX.2 要求不可识别的选项在诊断消息中表示为 ``illegal'',但是既然它们没有真正触犯法律,因此默认情况下它们在诊断 (diagnose) 消息中表示为 ``invalid''。 POSIXLY_CORRECTPOSIXLY_CORRECTPOSIXLY_CORRECT 同时禁止了下面描述的 __N_GNU_nonoption_argv_flags_。 _N_GNU_nonoption_argv_flags__GNU_nonoption_argv_flags_ (这里 N 是 grepgrepgrep's 数字形式的进程ID。) 如果这个环境变量的值的第 i 个字符是 11 ,那么不将 grepgrep 的第 i 个操作数视为一个选项,即使它看上去像。shell 可以将这个变量设置在它运行的每个命令的环境中,指定哪个操作数是文件名通配符扩展的结果,因此不应当被视为选项。这个行为只有在使用 GNU C 库时有效,并且只有在 POSIXLY_CORRECTPOSIXLY_CORRECTPOSIXLY_CORRECT 没有设置的时候。 DIAGNOSTICS 诊断 DIAGNOSTICS一般地,如果找到了选择的行,退出时状态值为0,否则为1。但是如果发生错误,退出时状态值是2,除非指定了 --q 或 ------quietquietquiet 或 ------silentsilentsilent 选项,并且找到了选择的行。 BUGSBUGS bug 报告的电子邮件地址是 bugbug--gnugnu--utils@gnu.org。 一定要在``Subject:''中带有 ``grep'' 这个词。 {n,m} 结构中重复次数过多会导致 grepgrepgrep 使用大量内存。另外,一些过分晦涩的正则表达式需要指数级在 {的时间和空间,可能会导致 grepgrepgrep 耗尽所有内存。 向后引用 (backreferences) 非常慢,可能需要指数级的时间。 [中文版中文版维护维护维护人人] 钧 IndexIndex NAME 总览 SYNOPSIS 描述 DESCRIPTION 选项 OPTIONS 正则表达式 REGULAR EXPRESSIONS 环境变量 ENVIRONMENT VARIABLES 诊断 DIAGNOSTICS BUGS [中文版维护人] [中文版最新更新] 《中国linux论坛man手册页翻译计划》: This document was created by man2html, using the manual pages. 因篇幅问题不能全部显示,请点此查看更多更全内容