summaryrefslogtreecommitdiff
path: root/Documentation/git-grep.txt
blob: a97f0557f4aa6cf1d795470d7bbe94ce35abc56a (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
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]
	   [-c | --count] [--all-match]
	   [-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.

-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.

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

-[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>.

-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.

`<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[7] suite