grep
Search file(s) for specific text.
SYNTAX
grep <options> "Search String" [filename]
grep <options> [-e PATTERN] [FILE...]
grep <options> [-f FILE] [FILE...]
A simple example
grep “Needle in a Haystack” /etc/*
Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN. By default, grep prints the matching lines. In addition, two variant programs egrep and fgrep are available. Egrep is the same as grep -E. Fgrep is the same as grep -F.
OPTIONS
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching
lines.
-a, --text
Process a binary file as if it were text; this is
equivalent to the --binary-files=text option.
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching
lines.
-b, --byte-offset
Print the byte offset within the input file before
each line of output.
-C [NUM], -NUM, --context[=NUM]
Print NUM lines (default 2) of output context.
-c, --count
Suppress normal output; instead print a count of
matching lines for each input file. With the -v,
--invert-match option (see below), count non-match-
ing lines.
-d ACTION, --directories=ACTION
If an input file is a directory, use ACTION to pro-
cess it. By default, ACTION is read, which means
that directories are read just as if they were
ordinary files. If ACTION is skip, directories are
silently skipped. If ACTION is recurse, grep reads
all files under each directory, recursively; this
is equivalent to the -r option.
-E, --extended-regexp
Interpret PATTERN as an extended regular expression
(see below).
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect pat-
terns beginning with -.
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, sepa-
rated by newlines, any of which is to be matched.
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty
file contains zero patterns, and therefore matches
nothing.
-G, --basic-regexp
Interpret PATTERN as a basic regular expression (default)
-H, --with-filename
Print the filename for each match.
-h, --no-filename
Suppress the prefixing of filenames on output when
multiple files are searched.
-I Process a binary file as if it did not contain
matching data; this is equivalent to the --binary-
files=without-match option.
-i, --ignore-case
Ignore case distinctions in both the PATTERN and
the input files.
-L, --files-without-match
Suppress normal output; instead print the name of
each input file from which no output would normally
have been printed. The scanning will stop on the
first match.
-l, --files-with-matches
Suppress normal output; instead print the name of
each input file from which output would normally
have been printed. The scanning will stop on the
first match.
-n, --line-number
Prefix each line of output with the line number
within its input file.
-q, --quiet, --silent
Quiet; suppress normal output. The scanning will
stop on the first match. Also see the -s or --no-
messages option below.
-r, --recursive
Read all files under each directory, recursively;
this is equivalent to the -d recurse option.
-s, --no-messages
Suppress error messages about nonexistent or
unreadable files. Portability note: unlike GNU
grep, traditional grep did not conform to POSIX.2,
because traditional grep lacked a -q option and its
-s option behaved like GNU grep's -q option. Shell
scripts intended to be portable to traditional grep
should avoid both -q and -s and should redirect
output to /dev/null instead.
-U, --binary
Treat the file(s) as binary. By default, under MS-
DOS and MS-Windows, grep guesses the file type by
looking at the contents of the first 32KB read from
the file. If grep decides the file is a text file,
it strips the CR characters from the original file
contents (to make regular expressions with ^ and $
work correctly). Specifying -U overrules this
guesswork, causing all files to be read and passed
to the matching mechanism verbatim; if the file is
a text file with CR/LF pairs at the end of each
line, this will cause some regular expressions to
fail. This option has no effect on platforms other
than MS-DOS and MS-Windows.
-u, --unix-byte-offsets
Report Unix-style byte offsets. This switch causes
grep to report byte offsets as if the file were
Unix-style text file, i.e., with CR characters
stripped off. This will produce results identical
to running grep on a Unix machine. This option has
no effect unless -b option is also used; it has no
effect on platforms other than MS-DOS and MS-Win-
dows.
-V, --version
Print the version number of grep to standard error.
This version number should be included in all bug
reports (see below).
-v, --invert-match
Invert the sense of matching, to select non-match-
ing lines.
-w, --word-regexp
Select only those lines containing matches that
form whole words. The test is that the matching
substring must either be at the beginning of the
line, or preceded by a non-word constituent charac-
ter. Similarly, it must be either at the end of
the line or followed by a non-word constituent
character. Word-constituent characters are let-
ters, digits, and the underscore.
-x, --line-regexp
Select only those matches that exactly match the
whole line.
-y Obsolete synonym for -i.
-Z, --null
Output a zero byte (the ASCII NUL character)
instead of the character that normally follows a
file name. For example, grep -lZ outputs a zero
byte after each file name instead of the usual new-
line. This option makes the output unambiguous,
even in the presence of file names containing
unusual characters like newlines. This option can
be used with commands like find -print0, perl -0,
sort -z, and xargs -0 to process arbitrary file
names, even those that contain newline characters.
--binary-files=TYPE
If the first few bytes of a file indicate that the
file contains binary data, assume that the file is
of type TYPE. By default, TYPE is binary, and grep
normally outputs either a one-line message saying
that a binary file matches, or no message if there
is no match. If TYPE is without-match, grep
assumes that a binary file does not match; this is
equivalent to the -I option. If TYPE is text, grep
processes a binary file as if it were text; this is
equivalent to the -a option. Warning: grep
--binary-files=text might output binary garbage,
which can have nasty side effects if the output is
a terminal and if the terminal driver interprets
some of it as commands.
--help Output a brief help message.
--mmap If possible, use the mmap(2) system call to read
input, instead of the default read(2) system call.
In some situations, --mmap yields better perfor-
mance. However, --mmap can cause undefined behav-
ior (including core dumps) if an input file shrinks
while grep is operating, or if an I/O error occurs.
Environment variables
Grep's behavior can be affected by setting the following environment variables
GREP_OPTIONS - default options
LC_ALL, LC_MESSAGES, LANG - language for messages
LC_CTYPE - foreign characters
POSIXLY_CORRECT - Posix behaviour
_N_GNU_nonoption_argv_flags_ - ignore an operand
see `info' for more on these
"The most dangerous of all falsehoods is a slightly distorted truth" - G. C. Lichtenberg
Related commands:
awk - Find and Replace text within file(s)
tr - Translate, squeeze, and/or delete characters
Equivalent BASH command:
grep - Search file(s) for specific text