# grep --options



| **grep (BSD)**                                               | **grep (GNU)**                                               |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| **-A** num, -**-after-context**=num<br />Print num lines of trailing context after each match.  See also the **-B** and **-C** options. | **-A** NUM, **--after-context**=NUM<br/>Print NUM lines of trailing context after matching lines.  Places a line containing a group separator (--) between contiguous groups of matches.  With the **-o** or **--only-matching** option, this has no effect and a warning is given. |
| **-a**, **--text**<br />Treat all files as ASCII text.       | **-a**, **--text**<br/>Process a binary file as if it were text; this is equivalent to the **--binary-files**=text option. |
| **-B** num, **--before-context**=num<br />Print num lines of leading context before each match.  See also the **-A** and **-C** options. | **-B** NUM, **--before-context**=NUM<br/>Print NUM lines of leading context before matching lines.  Places a line containing a group separator (--) between contiguous groups of matches.  With the **-o** or **--only-matching** option, this has no effect and a warning is given. |
| **-b**, **--byte-offset**<br />The offset in bytes of a matched pattern is displayed in front of the respective matched line. | **-b**, **--byte-offset**<br/>Print the 0-based byte offset within the input file before each line of output.  If **-o** (**--only-matching**) is specified,  print  the offset of the matching part itself. |
| **-C**[num, **--context**=num]<br />Print num lines of leading and trailing context surrounding each match.  The default is 2 and is equivalent to **-A** 2 **-B** 2. | **-C** NUM, -NUM, **--context**=NUM<br/>Print NUM lines of output context.  Places a line containing a group separator (--) between  contiguous  groups  of  matches.<br/>With the **-o** or **--only-matching** option, this has no effect and a warning is given. |
| **-c**, **--count**<br />Only a count of selected lines is written to standard output. | **-c**, **--count**<br/>Suppress normal output; instead print a count of matching lines for each input file.  With the **-v**, **--invert-match** option (see below), count non-matching lines. |
| **--colour**=[when, **--color**=[when]]<br />Mark up the matching text with the expression stored in GREP_COLOR environment variable.  The possible values of when can be *'never'*, *'always'* or *'auto'*. | **--color**[=WHEN], **--colour**[=WHEN]<br/>Surround  the  matched  (non-empty)  strings,  matching  lines,  context  lines,  file names, line numbers, byte offsets, and              separators (for fields and groups of context lines) with escape sequences to display them in  color  on  the  terminal.   The              colors  are  defined  by  the  environment  variable  GREP_COLORS.   The  deprecated environment variable GREP_COLOR is still              supported, but its setting does not have priority.  WHEN is *never*, *always*, or *auto*. |
| **-D** action, **--devices**=action<br />Specify the demanded action for devices, FIFOs and sockets.  The default action is *'read',* which means, that they are read as if they were normal files.  If the action is set to *'skip'*, devices will be silently skipped. | **-D** ACTION, **--devices**=ACTION<br/>If an input file is a device, FIFO or socket, use ACTION to process it.  By default, ACTION is *read*, which means that devices are read just as if they were ordinary files.  If ACTION is *skip*, devices are silently skipped. |
| **-d** action, **--directories**=action<br />Specify the demanded action for directories.  It is *'read'* by default, which means that the directories are read in the same manner as normal files.  Other possible values are *'skip'* to silently ignore the directories, and *'recurse'* to read them recursively, which has the same effect as the **-R** and **-r** option. | **-d** ACTION, **--directories**=ACTION<br/>If  an  input  file  is a directory, use ACTION to process it.  By default, ACTION is *read*, i.e., read directories just as if they were ordinary files.  If ACTION is *skip*, silently skip directories.  If ACTION is *recurse*, read  all  files  under  each directory,  recursively, following symbolic links only if they are on the command line.  This is equivalent to the **-r** option. |
| **-E**, **--extended-regexp**<br />Interpret pattern as an extended regular expression | **-E**, **--extended-regexp**<br/>Interpret PATTERNS as extended regular expressions (EREs, see below). |
| **-e** pattern, **--regexp**=pattern<br />Specify a pattern used during the search of the input: an input line is selected if it matches any of the specified patterns.  This option is most useful when multiple **-e** options are used to specify multiple patterns, or when a pattern begins with a dash (`-'). | **-e** PATTERNS, **--regexp**=PATTERNS<br/>Use  PATTERNS  as the patterns.  If this option is used multiple times or is combined with the **-f** (**--file**) option, search for all patterns given.  This option can be used to protect a pattern beginning with "-". |
| **--exclude**<br />If specified, it excludes files matching the given filename pattern from the search.  Note that **--exclude** patterns take priority over **--include** patterns, and if no **--include** pattern is specified, all files are searched that are not excluded.  Patterns are matched to the full path specified, not only to the filename component. | **--exclude**=GLOB<br/>Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the  whole  name,  or a trailing part that starts with a non-slash character immediately after a slash (/) in the name.  When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part  after  the  last  slash.   A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally. |
|                                                              | **--exclude-from**=FILE<br/>Skip  files  whose  base  name  matches any of the file-name globs read from FILE (using wildcard matching as described under --exclude). |
| **--exclude-dir**<br />If -R is specified, it excludes directories matching the given filename pattern from the search.  Note that **--exclude-dir** patterns take priority over **--include-dir** patterns, and if no **--include-dir** pattern is specified, all directories are searched that are not excluded. | **--exclude-dir**=GLOB<br/>Skip any command-line directory with a name suffix that matches the pattern  GLOB.   When  searching  recursively,  skip  any subdirectory whose base name matches GLOB.  Ignore any redundant trailing slashes in GLOB. |
| **-F**, **--fixed-strings**<br />Interpret pattern as a set of fixed strings | **-F**, **--fixed-strings**<br/>Interpret PATTERNS as fixed strings, not regular expressions. |
| **-f** file, **--file**=file<br />Read one or more newline separated patterns from file.  Empty pattern lines match every input line.  Newlines are not considered part of a pattern.  If file is empty, nothing is matched. | **-f** FILE, **--file**=FILE<br/>Obtain patterns from FILE, one per line.  If this option is used multiple times or is combined with the **-e** (**--regexp**) option, search for all patterns given.  The empty file contains zero patterns, and therefore matches nothing. |
| **-G**, **--basic-regexp**<br /> Interpret pattern as a basic regular expression. | **-G**, **--basic-regexp**<br/>Interpret PATTERNS as basic regular expressions (BREs, see below).  This is the default. |
| **-H**<br />Always print filename headers with output lines. | **-H**, **--with-filename**<br/>Print the file name for each match.  This is the default when there is more than one file to search. |
| **-h**, **--no-filename**<br/>Never print filename headers (i.e. filenames) with output lines. | **-h**, **--no-filename**<br/>Suppress  the prefixing of file names on output.  This is the default when there is only one file (or only standard input) to search. |
| **--help**<br />Print a brief help message.                  | **--help**<br />Output a usage message and exit.             |
| **-I**<br />Ignore binary files.  This option is equivalent to **--binary-file=without-match option**. | **-I**<br />Process  a binary file as if it did not contain matching data; this is equivalent to the **--binary-files=without-match option**. |
| **--include**<br />If specified, only files matching the given filename pattern are searched.  Note that **--exclude** patterns take priority over **--include** patterns.  Patterns are matched to the full path specified, not only to the filename component. | **--include**=GLOB<br/> Search only files whose base name matches GLOB (using wildcard matching as  described  under  **--exclude**). <br />If  contradictory **--include** and **--exclude** options are given, the last matching one wins. <br />If no **--include** or **--exclude** options match, a file is included unless the first such option is **--include**. |
| **--include-dir**<br/>If -R is specified, only directories matching the given filename pattern are searched.  Note that **--exclude-dir** patterns take priority over **--include-dir** patterns. |                                                              |
| **-J**, **--bz2decompress**<br/>Decompress the bzip2(1) compressed file before looking for the text. |                                                              |
| **-L**, **--files-without-match**<br/>Only the names of files not containing selected lines are written to standard output.  Pathnames are listed once per file searched.  If the standard input is searched, the string "(standard input)'' is written. | -L, --files-without-match<br/>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**<br/>Only the names of files containing selected lines are written to standard output.  grep will only search a file until a match has been found, making searches potentially less expensive.  Pathnames are listed once per file searched.  If the standard input is searched, the string "(standard input)'' is written. | -l, --files-with-matches<br/>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. |
| **--mmap**<br />Use mmap(2) instead of read(2) to read input, which can result in better performance under some circumstances but can cause undefined behaviour. |                                                              |
| **-m** num, **--max-count**=num<br/>Stop reading the file after num matches. | **-m** NUM, **--max-count**=NUM<br/>Stop reading a file after NUM matching lines.  If the input is standard input from a regular file, and NUM matching lines are output, grep ensures that the standard input is positioned to just after the last matching line before exiting, regardless of the presence of trailing context lines.  This enables a calling process to resume  a  search.   <br />When  grep  stops  after  NUM matching  lines,  it  outputs any trailing context lines.  <br />When the **-c** or **--count** option is also used, grep does not output a count greater than NUM.  <br />When the **-v** or **--invert-match** option is also used, grep  stops  after  outputting  NUM  non-matching lines. |
| **-n**, **--line-number**<br/>Each output line is preceded by its relative line number in the file, starting at line 1.  The line number counter is reset for each file processed.  This option is ignored if **-c**, **-L**, **-l**, or **-q** is specified. | **-n**, **--line-number**<br/>Prefix each line of output with the 1-based line number within its input file. |
| **--null**<br />Prints a zero-byte after the file name.      | **-Z**, **--null**<br/>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 newline.  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. |
| **-O**<br />If -R is specified, follow symbolic links only if they were explicitly listed on the command line.  The default is not to follow symbolic links. |                                                              |
| **-o**, **--only-matching**<br />Prints only the matching part of the lines. | **-o**, **--only-matching**<br />Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. |
| **-p**<br />If **-R** is specified, no symbolic links are followed.  This is the default. |                                                              |
| **-q**, **--quiet**, **--silent**<br/>Quiet mode: suppress normal output.  grep will only search a file until a match has been found, making searches potentially less expensive. | **-q**, **--quiet**, **--silent**<br/>Quiet;  do  not write anything to standard output.  Exit immediately with zero status if any match is found, even if an error was detected.  Also see the **-s** or **--no-messages** option. |
| **-R**, **-r**, **--recursive**<br/>Recursively search subdirectories listed. | **-r**, **--recursive**<br/>Read all files under each directory, recursively, following symbolic links only if they are on the command line.   Note  that if no file operand is given, grep searches the working directory.  This is equivalent to the **-d** recurse option. |
|                                                              | **-R**, **--dereference-recursive**<br/>Read all files under each directory, recursively.  Follow all symbolic links, unlike **-r**. |
| **-S**<br />If **-R** is specified, all symbolic links are followed.  The default is not to follow symbolic links. |                                                              |
| **-s**, **--no-messages**<br/>Silent mode.  Nonexistent and unreadable files are ignored (i.e. their error messages are suppressed). | **-s**, **--no-messages**<br/>Suppress error messages about nonexistent or unreadable files. |
| **-U**, **--binary**<br/>Search binary files, but do not attempt to print them. | **-U**, **--binary**<br/>Treat  the  file(s)  as  binary.   By  default, under MS-DOS and MS-Windows, grep guesses whether a file is text or binary as described for the **--binary-files** option.  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).  <br />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. |
| **-V**, **--version**<br/>Display version information and exit. | **-V**, **--version**<br/> Output the version number of grep and exit. |
| **-v**, **--invert-match**<br/>Selected lines are those not matching any of the specified patterns. | **-v**, **--invert-match**<br/>Invert the sense of matching, to select non-matching lines. |
| **-w**, **--word-regexp**<br/>The expression is searched for as a word (as if surrounded by `[[:<:]]` and `[[:>:]]`; see re_format(7)). | **-w**, **--word-regexp**<br/>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 character.  Similarly, it must be either at the end of the line or followed by a non-word constituent character.  Word-constituent characters are letters, digits, and  the  underscore.This option has no effect if -x is also specified. |
| **-x**, **--line-regexp**<br/>Only input lines selected against an entire fixed string or regular expression are considered to be matching lines. | **-x**, **--line-regexp**<br/>Select  only  those matches that exactly match the whole line.  For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $. |
| **-y**<br />Equivalent to **-i**.  Obsoleted.                | **-y**<br />Obsolete synonym for **-i.**                     |
| **-Z**, **-z**, **--decompress**<br/>Force grep to behave as zgrep. |                                                              |
|                                                              | **-z**, **--null-data**<br/>Treat input and output data as sequences of lines, each terminated by a zero byte (the ASCII  NUL  character)  instead  of  a newline.  Like the **-Z** or --null option, this option can be used with commands like sort **-z** to process arbitrary file names. |
| **--binary-files**=value<br/>Controls searching and printing of binary files.  Options are *binary*, the default: search binary files but do not print them; *without-match*: do not search binary files; and *text*: treat all files as text. | **--binary-files**=TYPE<br/>If  a  file's  data  or metadata indicate that the file contains binary data, assume that the file is of type TYPE.  Non-text bytes indicate binary data; these are either output bytes that are improperly encoded for the current locale, or  null  input bytes when the **-z** option is not given.<br/><br/>By  default,  TYPE  is  *binary*,  and grep suppresses output after null input binary data is discovered, and suppresses output lines that contain improperly encoded data.  When some output is suppressed, grep follows any output with a one-line  message saying that a binary file matches.<br/><br/>If  TYPE  is  *without-match*,  when grep discovers null input binary data it assumes that the rest of the file does not match; this is equivalent to the -I option.<br/><br/>If TYPE is *text*, grep processes a binary file as if it were text; this is equivalent to the **-a** option.<br/><br/>When type is *binary*, grep may treat non-text bytes as line terminators even without  the  **-z**  option.   This  means  choosing binary  versus text can affect whether a pattern matches a file.  For example, when type is *binary* the pattern q$ might match q immediately followed by a null byte, even though this is not matched when type is *text*.  Conversely, when  type  is  *binary* the pattern . (period) might not match a null byte.<br/><br/><u>Warning:</u>  The **-a** option 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.  On the other hand, when reading files whose text encodings  are  unknown, it  can  be  helpful to use **-a** or to set **LC_ALL='C'** in the environment, in order to find more matches even if the matches are unsafe for direct display. |
| **--context**[=num]<br/>Print num lines of leading and trailing context.  The default is 2. |                                                              |
| **--line-buffered**<br/>Force output to be line buffered.  By default, output is line buffered when standard output is a terminal and block buffered otherwise. | **--line-buffered**<br/>Use line buffering on output.  This can cause a performance penalty. |
|                                                              | **-i**, **--ignore-case**<br/>Ignore case distinctions in patterns and input data, so that characters that differ only in case match each other. |
|                                                              | **--no-ignore-case**<br/>Do not ignore case distinctions in patterns and input data.  This is the default.  This option is useful for passing to shell scripts that already use **-i**, to cancel its effects because the two options override each other. |
|                                                              | **--label=LABEL**<br />Display input actually coming from standard input as input coming from file LABEL.  This can  be  useful  for  commands  that transform  a  file's  contents before searching, e.g., gzip -cd foo.gz \|grep --label=foo -H 'some pattern'.  See also the **-H** |
|                                                              | **--perl-regexp**<br/>Interpret PATTERNS as Perl-compatible regular expressions (PCREs).  This option is experimental when  combined  with  the  **-z** (**--null-data**) option, and grep **-P** may warn of unimplemented features. |
|                                                              | **-T**, **--initial-tab**<br/>Make sure that the first character of actual line content lies on a tab stop, so that the alignment  of  tabs  looks  normal.<br/>This  is  useful  with  options  that  prefix  their  output  to  the actual content: **-H**,**-n**, and **-b**.  In order to improve the probability that lines from a single file will all start at the same column, this also causes the line number and byte offset (if present) to be printed in a minimum size field width. |
|                                                              | **-u**, **--unix-byte-offsets**<br/>Report  Unix-style  byte offsets.  This switch causes grep to report byte offsets as if the file were a 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-Windows. |

