Git 🌙
简体中文 ▾ Topics ▾ Latest version ▾ git-grep last updated in 2.45.0

名称

git-grep - 打印与模式匹配的行

概述

git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
	   [-v | --invert-match] [-h|-H] [--full-name]
	   [-E | --extended-regexp] [-G | --basic-regexp]
	   [-P | --perl-regexp]
	   [-F | --fixed-strings] [-n | --line-number] [--column]
	   [-l | --files-with-matches] [-L | --files-without-match]
	   [(-O | --open-files-in-pager) [<pager>]]
	   [-z | --null]
	   [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <depth>] [--[no-]recursive]
	   [--color[=<when>] | --no-color]
	   [--break] [--heading] [-p | --show-function]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-W | --function-context]
	   [(-m | --max-count) <num>]
	   [--threads <num>]
	   [-f <file>] [-e] <pattern>
	   [--and|--or|--not|(|)|-e <pattern>…​]
	   [--recurse-submodules] [--parent-basename <basename>]
	   [ [--[no-]exclude-standard] [--cached | --untracked | --no-index] | <tree>…​]
	   [--] [<pathspec>…​]

描述

在工作区中的跟踪文件、在索引文件中注册的 blobs 或给定树对象中的 blobs 中寻找指定的模式。 模式是由一个或多个搜索表达式组成的列表,用换行符分隔。 一个空的字符串作为搜索表达式可以匹配所有的行。

选项

--cached

与其搜索工作区中的跟踪文件,不如搜索索引文件中注册的 blobs。

--untracked

除了在工作区中的跟踪文件中搜索外,还可以在未跟踪的文件中搜索。

--no-index

在当前目录中搜索不由 Git 管理的文件,或者忽略当前目录由 Git 管理的事实。这类似于运行带有 -r 选项的常规 grep(1) 实用程序,但有一些额外的好处,比如使用路径模式来限制路径;更多信息请参见 gitglossary[7] 中的 pathspec 条目。

此选项不能与 --cached--untracked 一起使用。另请参见下面 CONFIGURATION 部分中的 grep.fallbackToNoIndex

--no-exclude-standard

也可以通过不遵守 .gitignore 机制在被忽略的文件中搜索。只对 --untracked 有用。

--exclude-standard

不注意通过 .gitignore 机制指定的被忽略的文件。 只有在用 --no-index 搜索当前目录下的文件时才有用。

--recurse-submodules

Recursively search in each submodule that is active and checked out in the repository. When used in combination with the <tree> option the prefix of all submodule output will be the name of the parent project’s <tree> object. This option cannot be used together with --untracked, and it has no effect if --no-index is specified.

-a
--text

像处理文本一样处理二进制文件。

--textconv

认可 textconv 过滤器设置。

--no-textconv

不用认可 textconv 过滤器的设置。 这是默认的。

-i
--ignore-case

忽略图案和文件之间的大小写差异。

-I

不匹配二进制文件中的模式。

--max-depth <深度>

对于命令行上给出的每个 <路径规范>,最多下降 <深度> 级目录。值为-1意味着没有限制。 如果 <路径规范> 包含有效的通配符,这个选项会被忽略。 换句话说,如果 "a*" 匹配名为 "a* "的目录,"*" 就会被匹配,所以 --max-depth 仍然有效。

-r
--recursive

--max-depth=-1 相同;这是默认值。

--no-recursive

--max-depth=0 相同。

-w
--word-regexp

只在词的边界处匹配模式(要么从一行的开头开始,要么前面是一个非词的字符;要么在一行的结尾结束,要么后面是一个非词的字符)。

-v
--invert-match

选择非匹配的行。

-h
-H

默认情况下,该命令显示每个匹配的文件名。 -h 选项用于抑制这种输出。 -H 是为了完整性而存在的,除了覆盖先前在命令行中给出的 -h 外,它不做任何事情。

--full-name

当从一个子目录运行时,该命令通常会输出相对于当前目录的路径。 这个选项强制输出相对于项目顶层目录的路径。

-E
--extended-regexp
-G
--basic-regexp

对模式使用 POSIX 扩展/基本的正则表达式。 默认是使用基本的正则表达式。

-P
--perl-regexp

使用与 Perl 兼容的正则表达式的模式。

对这些类型的正则表达式的支持是一个可选的编译时依赖。如果Git在编译时没有对它们的支持,提供这个选项将导致它死亡。

-F
--fixed-strings

使用固定的字符串来表示模式(不要把模式解释为一个重合词)。

-n
--line-number

在匹配的行前加上行号。

--column

前缀为从匹配行开始的第一个匹配的索引的字节偏移量。

-l
--files-with-matches
--name-only
-L
--files-without-match

不显示每个匹配行,只显示包含(或不包含)匹配的文件名。 为了与 git diff 更好地兼容,--name-only--files-with-matches 的同义词。

-O[<分页器>]
--open-files-in-pager[=<分页器>]

在分页器中打开匹配的文件(不是 grep 的输出)。 如果分页器恰好是 "less" 或 "vi",而用户只指定了一个模式,那么第一个文件就会自动定位在第一个匹配处。pager 参数是可选的;如果指定,它必须与选项卡在一起,没有空格。如果没有指定 pager,将使用默认的分页器(见 git-config[1] 中的 core.pager)。

-z
--null

Use \0 as the delimiter for pathnames in the output, and print them verbatim. Without this option, pathnames with "unusual" characters are quoted as explained for the configuration variable core.quotePath (see git-config[1]).

-o
--only-matching

只打印匹配行中的匹配(非空)部分,每一个这样的部分都在单独的输出行中。

-c
--count

与其显示每一个匹配的行,不如显示匹配的行数。

--color[=<when>]

显示有颜色的匹配。 该值必须是总是(默认值)、从不、或自动。

--no-color

关闭匹配高亮,即使在配置文件中默认为彩色输出。 与 --color=never 相同。

--break

在不同文件的匹配之间打印一个空行。

--heading

在该文件中的匹配项上方显示文件名,而不是在每个显示行的开头。

-p
--show-function

显示包含匹配的函数名的前一行,除非匹配的一行本身就是一个函数名。 该名称的确定方式与 git diff 编制补丁组头的方式相同(见 gitattributes[5] 中的 ‘定义自定义组头’)。

-<num>
-C <数量>
--context <数量>

显示 <num> 前导行和后导行,并在连续的匹配组之间放置一个包含`--`的行。

-A <num>
--after-context <数量>

显示 <num> 尾行,并在连续的匹配组之间放置一个包含 -- 的行。

-B <num>
--before-context <数量>

显示 <num> 引导行,并在连续的匹配组之间放置一个包含 -- 的行。

-W
--function-context

显示从包含函数名的前一行到下一个函数名之前的周围文本,有效地显示找到匹配的整个函数。函数名的确定方式与 git diff 确定补丁组头的方式相同(见 gitattributes[5] 中的 ‘定义自定义组头’)。

-C <数量>
--max-count <数量>

限制每个文件的匹配数量。当使用 -v--invert-match 选项时,搜索会在指定的非匹配数量后停止。值为 -1 将返回无限的结果(默认)。值为 0 将立即退出,状态为非零。

--threads <数量>

Number of grep worker threads to use. See NOTES ON THREADS and grep.threads in CONFIGURATION for more information.

-f <文件>

从 <文件> 中读取模式,每行一个。

通过<文件> 传递模式,可以提供一个包含一个 \0 的搜索模式。

不是所有的模式类型都支持包含 \0 的模式。如果一个给定的模式类型不支持这样的模式,Git 会出错。--perl-regexp 模式类型在针对 PCRE v2 后端进行编译时,对这些类型的模式有最广泛的支持。

在 2.23.0 之前的 Git 版本中,含有 \0 的模式会被默默地认为是固定的。这一点从未被记录下来,还有一些奇怪的、未被记录的互动,例如包含 \0 的非 ASCII 模式和 --ignore-case 之间。

在未来的版本中,我们可能会学会为更多的搜索后端支持含有 \0 的模式,在此之前,当有关的模式类型不支持它们时,我们就会死心。

-e

下一个参数是模式。这个选项必须用于以 - 开头的模式,并应在将用户输入传递给 grep 的脚本中使用。 多个模式用 or 组合。

--and
--or
--not
( …​ )

使用布尔表达式指定多个模式的组合方式。 --or 是默认的运算符。 --and--or 有更高的优先权。 -e 必须用于所有模式。

--all-match

当给出多个模式表达式与 --or 组合时,指定这个标志是为了将匹配限制在有行的文件中,以匹配所有的文件。

-q
--quiet

不输出匹配的行;相反,当有匹配时以状态 0 退出,没有匹配时以非零状态退出。

<目录树>…​

与其在工作区中搜索被追踪的文件,不如在给定的目录树中搜索 blobs。

--

标志着选项的结束;其余的参数是 <路径规范> 限制器。

<路径规范>…​

如果给定,将搜索限制在与至少一个模式匹配的路径上。 前导路径匹配和 glob(7) 模式都被支持。

有关 <指定路径> 格式的更多细节,请参考 gitglossary[7]

实例

git grep 'time_t' -- '*.[ch]'

在工作目录及其子目录中所有跟踪的 .c 和 .h 文件中寻找 time_t

git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)

寻找有 #defineMAX_PATHPATH_MAX 的行。

git grep --all-match -e NODE -e Unexpected

在文件中寻找有 NODEUnexpected 字样的行,这些行与这两个字相匹配。

git grep solution -- :^Documentation

寻找 solution,排除 `Documentation`中的文件。

线条的注释

The --threads option (and the grep.threads configuration) will be ignored when --open-files-in-pager is used, forcing a single-threaded execution.

When grepping the object store (with --cached or giving tree objects), running with multiple threads might perform slower than single-threaded if --textconv is given and there are too many text conversions. Thus, if low performance is experienced in this case, it might be desirable to use --threads=1.

配置

Warning

Missing zh_HANS-CN/includes/cmd-config-section-all.txt

See original version for this content.

Warning

Missing zh_HANS-CN/config/grep.txt

See original version for this content.

GIT

属于 git[1] 文档

scroll-to-top