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

Examples

Search the file example.txt, including binary data (-a) for the string 'hunting the snark':

$ sudo grep -a 'hunting the snark' example.txt

Search the whole partition (/disk0), including binary data (-a) for the string 'hunting the snark' return all the lines starting 25 Before the text found and 50 lines After the matching text found, this can be a way to discover fragments of deleted files:

$ sudo grep -a -B 25 -A 50 'hunting the snark' /dev/disk0> results.txt

Search the file wordlist.txt for any lines that don't include at least one vowel:

$ grep -v [aeiou] wordlist.txt

Searching an entire hard drive with grep can be very slow, using mdfind to identify files containing text is orders of magnitude faster.

"The most dangerous of all falsehoods is a slightly distorted truth" ~ G. C. Lichtenberg

Related:

grep man page - Apple.com
awk - Find and Replace text within file(s)
mdfind - Spotlight search
tr - Translate, squeeze, and/or delete characters


© Copyright SS64.com 1999-2013
Some rights reserved