summaryrefslogtreecommitdiff
path: root/Documentation/git-grep.txt
blob: e019e760b4b4d58dfbe8819941947008319aedac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
git-grep(1)
===========

NAME
----
git-grep - Print lines matching a pattern


SYNOPSIS
--------
[verse]
'git grep' [--cached]
	   [-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
	   [-v | --invert-match] [-h|-H] [--full-name]
	   [-E | --extended-regexp] [-G | --basic-regexp]
	   [-F | --fixed-strings] [-n]
	   [-l | --files-with-matches] [-L | --files-without-match]
	   [-z | --null]
	   [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <depth>]
	   [--color | --no-color]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-f <file>] [-e] <pattern>
	   [--and|--or|--not|(|)|-e <pattern>...] [<tree>...]
	   [--] [<path>...]

DESCRIPTION
-----------
Look for specified patterns in the working tree files, blobs
registered in the index file, or given tree objects.


OPTIONS
-------
--cached::
	Instead of searching in the working tree files, check
	the blobs registered in the index file.

-a::
--text::
	Process binary files as if they were text.

-i::
--ignore-case::
	Ignore case differences between the patterns and the
	files.

-I::
	Don't match the pattern in binary files.

--max-depth <depth>::
	For each pathspec given on command line, descend at most <depth>
	levels of directories. A negative value means no limit.

-w::
--word-regexp::
	Match the pattern only at word boundary (either begin at the
	beginning of a line, or preceded by a non-word character; end at
	the end of a line or followed by a non-word character).

-v::
--invert-match::
	Select non-matching lines.

-h::
-H::
	By default, the command shows the filename for each
	match.  `-h` option is used to suppress this output.
	`-H` is there for completeness and does not do anything
	except it overrides `-h` given earlier on the command
	line.

--full-name::
	When run from a subdirectory, the command usually
	outputs paths relative to the current directory.  This
	option forces paths to be output relative to the project
	top directory.

-E::
--extended-regexp::
-G::
--basic-regexp::
	Use POSIX extended/basic regexp for patterns.  Default
	is to use basic regexp.

-F::
--fixed-strings::
	Use fixed strings for patterns (don't interpret pattern
	as a regex).

-n::
	Prefix the line number to matching lines.

-l::
--files-with-matches::
--name-only::
-L::
--files-without-match::
	Instead of showing every matched line, show only the
	names of files that contain (or do not contain) matches.
	For better compatibility with 'git diff', --name-only is a
	synonym for --files-with-matches.

-z::
--null::
	Output \0 instead of the character that normally follows a
	file name.

-c::
--count::
	Instead of showing every matched line, show the number of
	lines that match.

--color::
	Show colored matches.

--no-color::
	Turn off match highlighting, even when the configuration file
	gives the default to color output.

-[ABC] <context>::
	Show `context` trailing (`A` -- after), or leading (`B`
	-- before), or both (`C` -- context) lines, and place a
	line containing `--` between contiguous groups of
	matches.

-<num>::
	A shortcut for specifying -C<num>.

-p::
--show-function::
	Show the preceding line that contains the function name of
	the match, unless the matching line is a function name itself.
	The name is determined in the same way as 'git diff' works out
	patch hunk headers (see 'Defining a custom hunk-header' in
	linkgit:gitattributes[5]).

-f <file>::
	Read patterns from <file>, one per line.

-e::
	The next parameter is the pattern. This option has to be
	used for patterns starting with - and should be used in
	scripts passing user input to grep.  Multiple patterns are
	combined by 'or'.

--and::
--or::
--not::
( ... )::
	Specify how multiple patterns are combined using Boolean
	expressions.  `--or` is the default operator.  `--and` has
	higher precedence than `--or`.  `-e` has to be used for all
	patterns.

--all-match::
	When giving multiple pattern expressions combined with `--or`,
	this flag is specified to limit the match to files that
	have lines to match all of them.

-q::
--quiet::
	Do not output matched lines; instead, exit with status 0 when
	there is a match and with non-zero status when there isn't.

`<tree>...`::
	Search blobs in the trees for specified patterns.

\--::
	Signals the end of options; the rest of the parameters
	are <path> limiters.


Example
-------

git grep -e \'#define\' --and \( -e MAX_PATH -e PATH_MAX \)::
	Looks for a line that has `#define` and either `MAX_PATH` or
	`PATH_MAX`.

git grep --all-match -e NODE -e Unexpected::
	Looks for a line that has `NODE` or `Unexpected` in
	files that have lines that match both.

Author
------
Originally written by Linus Torvalds <torvalds@osdl.org>, later
revamped by Junio C Hamano.


Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the linkgit:git[1] suite