diff options
Diffstat (limited to '')
-rw-r--r-- | src/grep/doc/grep.info | 2567 |
1 files changed, 2567 insertions, 0 deletions
diff --git a/src/grep/doc/grep.info b/src/grep/doc/grep.info new file mode 100644 index 0000000..9e1a4bd --- /dev/null +++ b/src/grep/doc/grep.info @@ -0,0 +1,2567 @@ +This is grep.info, produced by makeinfo version 6.8 from grep.texi. + +This manual is for ‘grep’, a pattern matching engine. + + Copyright © 1999–2002, 2005, 2008–2021 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, with no Front-Cover Texts, + and with no Back-Cover Texts. A copy of the license is included in + the section entitled “GNU Free Documentation License”. +INFO-DIR-SECTION Text creation and manipulation +START-INFO-DIR-ENTRY +* grep: (grep). Print lines that match patterns. +END-INFO-DIR-ENTRY + + +File: grep.info, Node: Top, Next: Introduction, Up: (dir) + +grep +**** + +‘grep’ prints lines that contain a match for one or more patterns. + + This manual is for version 3.7 of GNU Grep. + + This manual is for ‘grep’, a pattern matching engine. + + Copyright © 1999–2002, 2005, 2008–2021 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, with no Front-Cover Texts, + and with no Back-Cover Texts. A copy of the license is included in + the section entitled “GNU Free Documentation License”. + +* Menu: + +* Introduction:: Introduction. +* Invoking:: Command-line options, environment, exit status. +* Regular Expressions:: Regular Expressions. +* Usage:: Examples. +* Performance:: Performance tuning. +* Reporting Bugs:: Reporting Bugs. +* Copying:: License terms for this manual. +* Index:: Combined index. + + +File: grep.info, Node: Introduction, Next: Invoking, Prev: Top, Up: Top + +1 Introduction +************** + +Given one or more patterns, ‘grep’ searches input files for matches to +the patterns. When it finds a match in a line, it copies the line to +standard output (by default), or produces whatever other sort of output +you have requested with options. + + Though ‘grep’ expects to do the matching on text, it has no limits on +input line length other than available memory, and it can match +arbitrary characters within a line. If the final byte of an input file +is not a newline, ‘grep’ silently supplies one. Since newline is also a +separator for the list of patterns, there is no way to match newline +characters in a text. + + +File: grep.info, Node: Invoking, Next: Regular Expressions, Prev: Introduction, Up: Top + +2 Invoking ‘grep’ +***************** + +The general synopsis of the ‘grep’ command line is + + grep [OPTION...] [PATTERNS] [FILE...] + +There can be zero or more OPTION arguments, and zero or more FILE +arguments. The PATTERNS argument contains one or more patterns +separated by newlines, and is omitted when patterns are given via the +‘-e PATTERNS’ or ‘-f FILE’ options. Typically PATTERNS should be quoted +when ‘grep’ is used in a shell command. + +* Menu: + +* Command-line Options:: Short and long names, grouped by category. +* Environment Variables:: POSIX, GNU generic, and GNU grep specific. +* Exit Status:: Exit status returned by ‘grep’. +* grep Programs:: ‘grep’ programs. + + +File: grep.info, Node: Command-line Options, Next: Environment Variables, Up: Invoking + +2.1 Command-line Options +======================== + +‘grep’ comes with a rich set of options: some from POSIX and some being +GNU extensions. Long option names are always a GNU extension, even for +options that are from POSIX specifications. Options that are specified +by POSIX, under their short names, are explicitly marked as such to +facilitate POSIX-portable programming. A few option names are provided +for compatibility with older or more exotic implementations. + +* Menu: + +* Generic Program Information:: +* Matching Control:: +* General Output Control:: +* Output Line Prefix Control:: +* Context Line Control:: +* File and Directory Selection:: +* Other Options:: + + Several additional options control which variant of the ‘grep’ +matching engine is used. *Note grep Programs::. + + +File: grep.info, Node: Generic Program Information, Next: Matching Control, Up: Command-line Options + +2.1.1 Generic Program Information +--------------------------------- + +‘--help’ + Print a usage message briefly summarizing the command-line options + and the bug-reporting address, then exit. + +‘-V’ +‘--version’ + Print the version number of ‘grep’ to the standard output stream. + This version number should be included in all bug reports. + + +File: grep.info, Node: Matching Control, Next: General Output Control, Prev: Generic Program Information, Up: Command-line Options + +2.1.2 Matching Control +---------------------- + +‘-e PATTERNS’ +‘--regexp=PATTERNS’ + Use PATTERNS as one or more patterns; newlines within PATTERNS + separate each pattern from the next. If this option is used + multiple times or is combined with the ‘-f’ (‘--file’) option, + search for all patterns given. Typically PATTERNS should be quoted + when ‘grep’ is used in a shell command. (‘-e’ is specified by + POSIX.) + +‘-f FILE’ +‘--file=FILE’ + 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. (‘-f’ is specified by + POSIX.) + +‘-i’ +‘-y’ +‘--ignore-case’ + Ignore case distinctions in patterns and input data, so that + characters that differ only in case match each other. Although + this is straightforward when letters differ in case only via + lowercase-uppercase pairs, the behavior is unspecified in other + situations. For example, uppercase “S” has an unusual lowercase + counterpart “ſ” (Unicode character U+017F, LATIN SMALL LETTER LONG + S) in many locales, and it is unspecified whether this unusual + character matches “S” or “s” even though uppercasing it yields “S”. + Another example: the lowercase German letter “ß” (U+00DF, LATIN + SMALL LETTER SHARP S) is normally capitalized as the two-character + string “SS” but it does not match “SS”, and it might not match the + uppercase letter “ẞ” (U+1E9E, LATIN CAPITAL LETTER SHARP S) even + though lowercasing the latter yields the former. + + ‘-y’ is an obsolete synonym that is provided for compatibility. + (‘-i’ is specified by POSIX.) + +‘--no-ignore-case’ + 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’, in order to cancel its effects because the + two options override each other. + +‘-v’ +‘--invert-match’ + Invert the sense of matching, to select non-matching lines. (‘-v’ + is specified by POSIX.) + +‘-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 + 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. + + Because the ‘-w’ option can match a substring that does not begin + and end with word constituents, it differs from surrounding a + regular expression with ‘\<’ and ‘\>’. For example, although ‘grep + -w @’ matches a line containing only ‘@’, ‘grep '\<@\>'’ cannot + match any line because ‘@’ is not a word constituent. *Note The + Backslash Character and Special Expressions::. + +‘-x’ +‘--line-regexp’ + Select only those matches that exactly match the whole line. For + regular expression patterns, this is like parenthesizing each + pattern and then surrounding it with ‘^’ and ‘$’. (‘-x’ is + specified by POSIX.) + + +File: grep.info, Node: General Output Control, Next: Output Line Prefix Control, Prev: Matching Control, Up: Command-line Options + +2.1.3 General Output Control +---------------------------- + +‘-c’ +‘--count’ + Suppress normal output; instead print a count of matching lines for + each input file. With the ‘-v’ (‘--invert-match’) option, count + non-matching lines. (‘-c’ is specified by POSIX.) + +‘--color[=WHEN]’ +‘--colour[=WHEN]’ + 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’ and default to + ‘ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36’ for bold red + matched text, magenta file names, green line numbers, green byte + offsets, cyan separators, and default terminal colors otherwise. + The deprecated environment variable ‘GREP_COLOR’ is still + supported, but its setting does not have priority; it defaults to + ‘01;31’ (bold red) which only covers the color for matched text. + WHEN is ‘never’, ‘always’, or ‘auto’. + +‘-L’ +‘--files-without-match’ + Suppress normal output; instead print the name of each input file + from which no output would normally have been printed. + +‘-l’ +‘--files-with-matches’ + Suppress normal output; instead print the name of each input file + from which output would normally have been printed. Scanning each + input file stops upon first match. (‘-l’ is specified by POSIX.) + +‘-m NUM’ +‘--max-count=NUM’ + Stop after the first NUM selected lines. If the input is standard + input from a regular file, and NUM selected lines are output, + ‘grep’ ensures that the standard input is positioned just after the + last selected line before exiting, regardless of the presence of + trailing context lines. This enables a calling process to resume a + search. For example, the following shell script makes use of it: + + while grep -m 1 'PATTERN' + do + echo xxxx + done < FILE + + But the following probably will not work because a pipe is not a + regular file: + + # This probably will not work. + cat FILE | + while grep -m 1 'PATTERN' + do + echo xxxx + done + + When ‘grep’ stops after NUM selected lines, it outputs any trailing + context lines. When the ‘-c’ or ‘--count’ option is also used, + ‘grep’ does not output a count greater than NUM. When the ‘-v’ or + ‘--invert-match’ option is also used, ‘grep’ stops after outputting + NUM non-matching lines. + +‘-o’ +‘--only-matching’ + Print only the matched (non-empty) parts of matching lines, with + each such part on a separate output line. Output lines use the + same delimiters as input, and delimiters are null bytes if ‘-z’ + (‘--null-data’) is also used (*note Other Options::). + +‘-q’ +‘--quiet’ +‘--silent’ + 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. (‘-q’ is + specified by POSIX.) + +‘-s’ +‘--no-messages’ + Suppress error messages about nonexistent or unreadable files. + Portability note: unlike GNU ‘grep’, 7th Edition Unix ‘grep’ did + not conform to POSIX, because it lacked ‘-q’ and its ‘-s’ option + behaved like GNU ‘grep’’s ‘-q’ option.(1) USG-style ‘grep’ also + lacked ‘-q’ but its ‘-s’ option behaved like GNU ‘grep’’s. + Portable shell scripts should avoid both ‘-q’ and ‘-s’ and should + redirect standard and error output to ‘/dev/null’ instead. (‘-s’ + is specified by POSIX.) + + ---------- Footnotes ---------- + + (1) Of course, 7th Edition Unix predated POSIX by several years! + + +File: grep.info, Node: Output Line Prefix Control, Next: Context Line Control, Prev: General Output Control, Up: Command-line Options + +2.1.4 Output Line Prefix Control +-------------------------------- + +When several prefix fields are to be output, the order is always file +name, line number, and byte offset, regardless of the order in which +these options were specified. + +‘-b’ +‘--byte-offset’ + 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. + +‘-H’ +‘--with-filename’ + Print the file name for each match. This is the default when there + is more than one file to search. + +‘-h’ +‘--no-filename’ + Suppress the prefixing of file names on output. This is the + default when there is only one file (or only standard input) to + search. + +‘--label=LABEL’ + 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' + +‘-n’ +‘--line-number’ + Prefix each line of output with the 1-based line number within its + input file. (‘-n’ is specified by POSIX.) + +‘-T’ +‘--initial-tab’ + Make sure that the first character of actual line content lies on a + tab stop, so that the alignment of tabs looks normal. This is + useful with options that prefix their output to the actual content: + ‘-H’, ‘-n’, and ‘-b’. This may also prepend spaces to output line + numbers and byte offsets so that lines from a single file all start + at the same column. + +‘-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 + 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. + + +File: grep.info, Node: Context Line Control, Next: File and Directory Selection, Prev: Output Line Prefix Control, Up: Command-line Options + +2.1.5 Context Line Control +-------------------------- + +“Context lines” are non-matching lines that are near a matching line. +They are output only if one of the following options are used. +Regardless of how these options are set, ‘grep’ never outputs any given +line more than once. If the ‘-o’ (‘--only-matching’) option is +specified, these options have no effect and a warning is given upon +their use. + +‘-A NUM’ +‘--after-context=NUM’ + Print NUM lines of trailing context after matching lines. + +‘-B NUM’ +‘--before-context=NUM’ + Print NUM lines of leading context before matching lines. + +‘-C NUM’ +‘-NUM’ +‘--context=NUM’ + Print NUM lines of leading and trailing output context. + +‘--group-separator=STRING’ + When ‘-A’, ‘-B’ or ‘-C’ are in use, print STRING instead of ‘--’ + between groups of lines. + +‘--no-group-separator’ + When ‘-A’, ‘-B’ or ‘-C’ are in use, do not print a separator + between groups of lines. + + Here are some points about how ‘grep’ chooses the separator to print +between prefix fields and line content: + + • Matching lines normally use ‘:’ as a separator between prefix + fields and actual line content. + + • Context (i.e., non-matching) lines use ‘-’ instead. + + • When context is not specified, matching lines are simply output one + right after another. + + • When context is specified, lines that are adjacent in the input + form a group and are output one right after another, while by + default a separator appears between non-adjacent groups. + + • The default separator is a ‘--’ line; its presence and appearance + can be changed with the options above. + + • Each group may contain several matching lines when they are close + enough to each other that two adjacent groups connect and can merge + into a single contiguous one. + + +File: grep.info, Node: File and Directory Selection, Next: Other Options, Prev: Context Line Control, Up: Command-line Options + +2.1.6 File and Directory Selection +---------------------------------- + +‘-a’ +‘--text’ + Process a binary file as if it were text; this is equivalent to the + ‘--binary-files=text’ option. + +‘--binary-files=TYPE’ + 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 (*note Environment + Variables::), or null input bytes when the ‘-z’ (‘--null-data’) + option is not given (*note Other Options::). + + 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. + + 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. + + If TYPE is ‘text’, ‘grep’ processes binary data as if it were text; + this is equivalent to the ‘-a’ option. + + When TYPE is ‘binary’, ‘grep’ may treat non-text bytes as line + terminators even without the ‘-z’ (‘--null-data’) 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. + + _Warning:_ The ‘-a’ (‘--binary-files=text’) 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. + +‘-D ACTION’ +‘--devices=ACTION’ + If an input file is a device, FIFO, or socket, use ACTION to + process it. If ACTION is ‘read’, all devices are read just as if + they were ordinary files. If ACTION is ‘skip’, devices, FIFOs, and + sockets are silently skipped. By default, devices are read if they + are on the command line or if the ‘-R’ (‘--dereference-recursive’) + option is used, and are skipped if they are encountered recursively + and the ‘-r’ (‘--recursive’) option is used. This option has no + effect on a file that is read via standard input. + +‘-d ACTION’ +‘--directories=ACTION’ + If an input file is a directory, use ACTION to process it. By + default, ACTION is ‘read’, which means that directories are read + just as if they were ordinary files (some operating systems and + file systems disallow this, and will cause ‘grep’ to print error + messages for every directory or silently skip them). If ACTION is + ‘skip’, directories are silently skipped. If ACTION is ‘recurse’, + ‘grep’ reads all files under each directory, recursively, following + command-line symbolic links and skipping other symlinks; this is + equivalent to the ‘-r’ option. + +‘--exclude=GLOB’ + 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’ + Skip files whose name matches any of the patterns read from FILE + (using wildcard matching as described under ‘--exclude’). + +‘--exclude-dir=GLOB’ + 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. + +‘-I’ + Process a binary file as if it did not contain matching data; this + is equivalent to the ‘--binary-files=without-match’ option. + +‘--include=GLOB’ + Search only files whose name matches GLOB, using wildcard matching + as described under ‘--exclude’. If contradictory ‘--include’ and + ‘--exclude’ options are given, the last matching one wins. If no + ‘--include’ or ‘--exclude’ options match, a file is included unless + the first such option is ‘--include’. + +‘-r’ +‘--recursive’ + For each directory operand, read and process all files in that + directory, recursively. Follow symbolic links on the command line, + but skip symlinks that are encountered recursively. Note that if + no file operand is given, grep searches the working directory. + This is the same as the ‘--directories=recurse’ option. + +‘-R’ +‘--dereference-recursive’ + For each directory operand, read and process all files in that + directory, recursively, following all symbolic links. + + +File: grep.info, Node: Other Options, Prev: File and Directory Selection, Up: Command-line Options + +2.1.7 Other Options +------------------- + +‘--’ + Delimit the option list. Later arguments, if any, are treated as + operands even if they begin with ‘-’. For example, ‘grep PAT -- + -file1 file2’ searches for the pattern PAT in the files named + ‘-file1’ and ‘file2’. + +‘--line-buffered’ + Use line buffering for standard output, regardless of output + device. By default, standard output is line buffered for + interactive devices, and is fully buffered otherwise. With full + buffering, the output buffer is flushed when full; with line + buffering, the buffer is also flushed after every output line. The + buffer size is system dependent. + +‘-U’ +‘--binary’ + On platforms that distinguish between text and binary I/O, use the + latter when reading and writing files other than the user’s + terminal, so that all input bytes are read and written as-is. This + overrides the default behavior where ‘grep’ follows the operating + system’s advice whether to use text or binary I/O. On MS-Windows + when ‘grep’ uses text I/O it reads a carriage return–newline pair + as a newline and a Control-Z as end-of-file, and it writes a + newline as a carriage return–newline pair. + + When using text I/O ‘--byte-offset’ (‘-b’) counts and + ‘--binary-files’ heuristics apply to input data after text-I/O + processing. Also, the ‘--binary-files’ heuristics need not agree + with the ‘--binary’ option; that is, they may treat the data as + text even if ‘--binary’ is given, or vice versa. *Note File and + Directory Selection::. + + This option has no effect on GNU and other POSIX-compatible + platforms, which do not distinguish text from binary I/O. + +‘-z’ +‘--null-data’ + 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. + + +File: grep.info, Node: Environment Variables, Next: Exit Status, Prev: Command-line Options, Up: Invoking + +2.2 Environment Variables +========================= + +The behavior of ‘grep’ is affected by the following environment +variables. + + The locale for category ‘LC_FOO’ is specified by examining the three +environment variables ‘LC_ALL’, ‘LC_FOO’, and ‘LANG’, in that order. +The first of these variables that is set specifies the locale. For +example, if ‘LC_ALL’ is not set, but ‘LC_COLLATE’ is set to ‘pt_BR’, +then the Brazilian Portuguese locale is used for the ‘LC_COLLATE’ +category. As a special case for ‘LC_MESSAGES’ only, the environment +variable ‘LANGUAGE’ can contain a colon-separated list of languages that +overrides the three environment variables that ordinarily specify the +‘LC_MESSAGES’ category. The ‘C’ locale is used if none of these +environment variables are set, if the locale catalog is not installed, +or if ‘grep’ was not compiled with national language support (NLS). The +shell command ‘locale -a’ lists locales that are currently available. + + Many of the environment variables in the following list let you +control highlighting using Select Graphic Rendition (SGR) commands +interpreted by the terminal or terminal emulator. (See the section in +the documentation of your text terminal for permitted values and their +meanings as character attributes.) These substring values are integers +in decimal representation and can be concatenated with semicolons. +‘grep’ takes care of assembling the result into a complete SGR sequence +(‘\33[’...‘m’). Common values to concatenate include ‘1’ for bold, ‘4’ +for underline, ‘5’ for blink, ‘7’ for inverse, ‘39’ for default +foreground color, ‘30’ to ‘37’ for foreground colors, ‘90’ to ‘97’ for +16-color mode foreground colors, ‘38;5;0’ to ‘38;5;255’ for 88-color and +256-color modes foreground colors, ‘49’ for default background color, +‘40’ to ‘47’ for background colors, ‘100’ to ‘107’ for 16-color mode +background colors, and ‘48;5;0’ to ‘48;5;255’ for 88-color and 256-color +modes background colors. + + The two-letter names used in the ‘GREP_COLORS’ environment variable +(and some of the others) refer to terminal “capabilities,” the ability +of a terminal to highlight text, or change its color, and so on. These +capabilities are stored in an online database and accessed by the +‘terminfo’ library. + +‘GREP_COLOR’ + This variable specifies the color used to highlight matched + (non-empty) text. It is deprecated in favor of ‘GREP_COLORS’, but + still supported. The ‘mt’, ‘ms’, and ‘mc’ capabilities of + ‘GREP_COLORS’ have priority over it. It can only specify the color + used to highlight the matching non-empty text in any matching line + (a selected line when the ‘-v’ command-line option is omitted, or a + context line when ‘-v’ is specified). The default is ‘01;31’, + which means a bold red foreground text on the terminal’s default + background. + +‘GREP_COLORS’ + This variable specifies the colors and other attributes used to + highlight various parts of the output. Its value is a + colon-separated list of ‘terminfo’ capabilities that defaults to + ‘ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36’ with the ‘rv’ + and ‘ne’ boolean capabilities omitted (i.e., false). Supported + capabilities are as follows. + + ‘sl=’ + SGR substring for whole selected lines (i.e., matching lines + when the ‘-v’ command-line option is omitted, or non-matching + lines when ‘-v’ is specified). If however the boolean ‘rv’ + capability and the ‘-v’ command-line option are both + specified, it applies to context matching lines instead. The + default is empty (i.e., the terminal’s default color pair). + + ‘cx=’ + SGR substring for whole context lines (i.e., non-matching + lines when the ‘-v’ command-line option is omitted, or + matching lines when ‘-v’ is specified). If however the + boolean ‘rv’ capability and the ‘-v’ command-line option are + both specified, it applies to selected non-matching lines + instead. The default is empty (i.e., the terminal’s default + color pair). + + ‘rv’ + Boolean value that reverses (swaps) the meanings of the ‘sl=’ + and ‘cx=’ capabilities when the ‘-v’ command-line option is + specified. The default is false (i.e., the capability is + omitted). + + ‘mt=01;31’ + SGR substring for matching non-empty text in any matching line + (i.e., a selected line when the ‘-v’ command-line option is + omitted, or a context line when ‘-v’ is specified). Setting + this is equivalent to setting both ‘ms=’ and ‘mc=’ at once to + the same value. The default is a bold red text foreground + over the current line background. + + ‘ms=01;31’ + SGR substring for matching non-empty text in a selected line. + (This is used only when the ‘-v’ command-line option is + omitted.) The effect of the ‘sl=’ (or ‘cx=’ if ‘rv’) + capability remains active when this takes effect. The default + is a bold red text foreground over the current line + background. + + ‘mc=01;31’ + SGR substring for matching non-empty text in a context line. + (This is used only when the ‘-v’ command-line option is + specified.) The effect of the ‘cx=’ (or ‘sl=’ if ‘rv’) + capability remains active when this takes effect. The default + is a bold red text foreground over the current line + background. + + ‘fn=35’ + SGR substring for file names prefixing any content line. The + default is a magenta text foreground over the terminal’s + default background. + + ‘ln=32’ + SGR substring for line numbers prefixing any content line. + The default is a green text foreground over the terminal’s + default background. + + ‘bn=32’ + SGR substring for byte offsets prefixing any content line. + The default is a green text foreground over the terminal’s + default background. + + ‘se=36’ + SGR substring for separators that are inserted between + selected line fields (‘:’), between context line fields (‘-’), + and between groups of adjacent lines when nonzero context is + specified (‘--’). The default is a cyan text foreground over + the terminal’s default background. + + ‘ne’ + Boolean value that prevents clearing to the end of line using + Erase in Line (EL) to Right (‘\33[K’) each time a colorized + item ends. This is needed on terminals on which EL is not + supported. It is otherwise useful on terminals for which the + ‘back_color_erase’ (‘bce’) boolean ‘terminfo’ capability does + not apply, when the chosen highlight colors do not affect the + background, or when EL is too slow or causes too much flicker. + The default is false (i.e., the capability is omitted). + + Note that boolean capabilities have no ‘=’... part. They are + omitted (i.e., false) by default and become true when specified. + +‘LC_ALL’ +‘LC_COLLATE’ +‘LANG’ + These variables specify the locale for the ‘LC_COLLATE’ category, + which might affect how range expressions like ‘[a-z]’ are + interpreted. + +‘LC_ALL’ +‘LC_CTYPE’ +‘LANG’ + These variables specify the locale for the ‘LC_CTYPE’ category, + which determines the type of characters, e.g., which characters are + whitespace. This category also determines the character encoding. + *Note Character Encoding::. + +‘LANGUAGE’ +‘LC_ALL’ +‘LC_MESSAGES’ +‘LANG’ + These variables specify the locale for the ‘LC_MESSAGES’ category, + which determines the language that ‘grep’ uses for messages. The + default ‘C’ locale uses American English messages. + +‘POSIXLY_CORRECT’ + If set, ‘grep’ behaves as POSIX requires; otherwise, ‘grep’ behaves + more like other GNU programs. POSIX requires that options that + follow file names must be treated as file names; by default, such + options are permuted to the front of the operand list and are + treated as options. Also, ‘POSIXLY_CORRECT’ disables special + handling of an invalid bracket expression. *Note + invalid-bracket-expr::. + +‘_N_GNU_nonoption_argv_flags_’ + (Here ‘N’ is ‘grep’’s numeric process ID.) If the Ith character of + this environment variable’s value is ‘1’, do not consider the Ith + operand of ‘grep’ to be an option, even if it appears to be one. A + shell can put this variable in the environment for each command it + runs, specifying which operands are the results of file name + wildcard expansion and therefore should not be treated as options. + This behavior is available only with the GNU C library, and only + when ‘POSIXLY_CORRECT’ is not set. + + The ‘GREP_OPTIONS’ environment variable of ‘grep’ 2.20 and earlier is +no longer supported, as it caused problems when writing portable +scripts. To make arbitrary changes to how ‘grep’ works, you can use an +alias or script instead. For example, if ‘grep’ is in the directory +‘/usr/bin’ you can prepend ‘$HOME/bin’ to your ‘PATH’ and create an +executable script ‘$HOME/bin/grep’ containing the following: + + #! /bin/sh + export PATH=/usr/bin + exec grep --color=auto --devices=skip "$@" + + +File: grep.info, Node: Exit Status, Next: grep Programs, Prev: Environment Variables, Up: Invoking + +2.3 Exit Status +=============== + +Normally the exit status is 0 if a line is selected, 1 if no lines were +selected, and 2 if an error occurred. However, if the ‘-q’ or ‘--quiet’ +or ‘--silent’ option is used and a line is selected, the exit status is +0 even if an error occurred. Other ‘grep’ implementations may exit with +status greater than 2 on error. + + +File: grep.info, Node: grep Programs, Prev: Exit Status, Up: Invoking + +2.4 ‘grep’ Programs +=================== + +‘grep’ searches the named input files for lines containing a match to +the given patterns. By default, ‘grep’ prints the matching lines. A +file named ‘-’ stands for standard input. If no input is specified, +‘grep’ searches the working directory ‘.’ if given a command-line option +specifying recursion; otherwise, ‘grep’ searches standard input. There +are four major variants of ‘grep’, controlled by the following options. + +‘-G’ +‘--basic-regexp’ + Interpret patterns as basic regular expressions (BREs). This is + the default. + +‘-E’ +‘--extended-regexp’ + Interpret patterns as extended regular expressions (EREs). (‘-E’ + is specified by POSIX.) + +‘-F’ +‘--fixed-strings’ + Interpret patterns as fixed strings, not regular expressions. + (‘-F’ is specified by POSIX.) + +‘-P’ +‘--perl-regexp’ + Interpret patterns as Perl-compatible regular expressions (PCREs). + PCRE support is here to stay, but consider this option experimental + when combined with the ‘-z’ (‘--null-data’) option, and note that + ‘grep -P’ may warn of unimplemented features. *Note Other + Options::. + + In addition, two variant programs ‘egrep’ and ‘fgrep’ are available. +‘egrep’ is the same as ‘grep -E’. ‘fgrep’ is the same as ‘grep -F’. +Direct invocation as either ‘egrep’ or ‘fgrep’ is deprecated, but is +provided to allow historical applications that rely on them to run +unmodified. + + +File: grep.info, Node: Regular Expressions, Next: Usage, Prev: Invoking, Up: Top + +3 Regular Expressions +********************* + +A “regular expression” is a pattern that describes a set of strings. +Regular expressions are constructed analogously to arithmetic +expressions, by using various operators to combine smaller expressions. +‘grep’ understands three different versions of regular expression +syntax: basic (BRE), extended (ERE), and Perl-compatible (PCRE). In GNU +‘grep’, there is no difference in available functionality between the +basic and extended syntaxes. In other implementations, basic regular +expressions are less powerful. The following description applies to +extended regular expressions; differences for basic regular expressions +are summarized afterwards. Perl-compatible regular expressions give +additional functionality, and are documented in the pcresyntax(3) and +pcrepattern(3) manual pages, but work only if PCRE is available in the +system. + +* Menu: + +* Fundamental Structure:: +* Character Classes and Bracket Expressions:: +* The Backslash Character and Special Expressions:: +* Anchoring:: +* Back-references and Subexpressions:: +* Basic vs Extended:: +* Character Encoding:: +* Matching Non-ASCII:: + + +File: grep.info, Node: Fundamental Structure, Next: Character Classes and Bracket Expressions, Up: Regular Expressions + +3.1 Fundamental Structure +========================= + +In regular expressions, the characters ‘.?*+{|()[\^$’ are “special +characters” and have uses described below. All other characters are +“ordinary characters”, and each ordinary character is a regular +expression that matches itself. + + The period ‘.’ matches any single character. It is unspecified +whether ‘.’ matches an encoding error. + + A regular expression may be followed by one of several repetition +operators; the operators beginning with ‘{’ are called “interval +expressions”. + +‘?’ + The preceding item is optional and is matched at most once. + +‘*’ + The preceding item is matched zero or more times. + +‘+’ + The preceding item is matched one or more times. + +‘{N}’ + The preceding item is matched exactly N times. + +‘{N,}’ + The preceding item is matched N or more times. + +‘{,M}’ + The preceding item is matched at most M times. This is a GNU + extension. + +‘{N,M}’ + The preceding item is matched at least N times, but not more than M + times. + + The empty regular expression matches the empty string. Two regular +expressions may be concatenated; the resulting regular expression +matches any string formed by concatenating two substrings that +respectively match the concatenated expressions. + + Two regular expressions may be joined by the infix operator ‘|’; the +resulting regular expression matches any string matching either +alternate expression. + + Repetition takes precedence over concatenation, which in turn takes +precedence over alternation. A whole expression may be enclosed in +parentheses to override these precedence rules and form a subexpression. +An unmatched ‘)’ matches just itself. + + +File: grep.info, Node: Character Classes and Bracket Expressions, Next: The Backslash Character and Special Expressions, Prev: Fundamental Structure, Up: Regular Expressions + +3.2 Character Classes and Bracket Expressions +============================================= + +A “bracket expression” is a list of characters enclosed by ‘[’ and ‘]’. +It matches any single character in that list. If the first character of +the list is the caret ‘^’, then it matches any character *not* in the +list, and it is unspecified whether it matches an encoding error. For +example, the regular expression ‘[0123456789]’ matches any single digit, +whereas ‘[^()]’ matches any single character that is not an opening or +closing parenthesis, and might or might not match an encoding error. + + Within a bracket expression, a “range expression” consists of two +characters separated by a hyphen. It matches any single character that +sorts between the two characters, inclusive. In the default C locale, +the sorting sequence is the native character order; for example, ‘[a-d]’ +is equivalent to ‘[abcd]’. In other locales, the sorting sequence is +not specified, and ‘[a-d]’ might be equivalent to ‘[abcd]’ or to +‘[aBbCcDd]’, or it might fail to match any character, or the set of +characters that it matches might even be erratic. To obtain the +traditional interpretation of bracket expressions, you can use the ‘C’ +locale by setting the ‘LC_ALL’ environment variable to the value ‘C’. + + Finally, certain named classes of characters are predefined within +bracket expressions, as follows. Their interpretation depends on the +‘LC_CTYPE’ locale; for example, ‘[[:alnum:]]’ means the character class +of numbers and letters in the current locale. + +‘[:alnum:]’ + Alphanumeric characters: ‘[:alpha:]’ and ‘[:digit:]’; in the ‘C’ + locale and ASCII character encoding, this is the same as + ‘[0-9A-Za-z]’. + +‘[:alpha:]’ + Alphabetic characters: ‘[:lower:]’ and ‘[:upper:]’; in the ‘C’ + locale and ASCII character encoding, this is the same as + ‘[A-Za-z]’. + +‘[:blank:]’ + Blank characters: space and tab. + +‘[:cntrl:]’ + Control characters. In ASCII, these characters have octal codes + 000 through 037, and 177 (DEL). In other character sets, these are + the equivalent characters, if any. + +‘[:digit:]’ + Digits: ‘0 1 2 3 4 5 6 7 8 9’. + +‘[:graph:]’ + Graphical characters: ‘[:alnum:]’ and ‘[:punct:]’. + +‘[:lower:]’ + Lower-case letters; in the ‘C’ locale and ASCII character encoding, + this is ‘a b c d e f g h i j k l m n o p q r s t u v w x y z’. + +‘[:print:]’ + Printable characters: ‘[:alnum:]’, ‘[:punct:]’, and space. + +‘[:punct:]’ + Punctuation characters; in the ‘C’ locale and ASCII character + encoding, this is ‘! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ + ] ^ _ ` { | } ~’. + +‘[:space:]’ + Space characters: in the ‘C’ locale, this is tab, newline, vertical + tab, form feed, carriage return, and space. *Note Usage::, for + more discussion of matching newlines. + +‘[:upper:]’ + Upper-case letters: in the ‘C’ locale and ASCII character encoding, + this is ‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’. + +‘[:xdigit:]’ + Hexadecimal digits: ‘0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f’. + + Note that the brackets in these class names are part of the symbolic +names, and must be included in addition to the brackets delimiting the +bracket expression. + + If you mistakenly omit the outer brackets, and search for say, +‘[:upper:]’, GNU ‘grep’ prints a diagnostic and exits with status 2, on +the assumption that you did not intend to search for the nominally +equivalent regular expression: ‘[:epru]’. Set the ‘POSIXLY_CORRECT’ +environment variable to disable this feature. + + Special characters lose their special meaning inside bracket +expressions. + +‘]’ + ends the bracket expression if it’s not the first list item. So, + if you want to make the ‘]’ character a list item, you must put it + first. + +‘[.’ + represents the open collating symbol. + +‘.]’ + represents the close collating symbol. + +‘[=’ + represents the open equivalence class. + +‘=]’ + represents the close equivalence class. + +‘[:’ + represents the open character class symbol, and should be followed + by a valid character class name. + +‘:]’ + represents the close character class symbol. + +‘-’ + represents the range if it’s not first or last in a list or the + ending point of a range. + +‘^’ + represents the characters not in the list. If you want to make the + ‘^’ character a list item, place it anywhere but first. + + +File: grep.info, Node: The Backslash Character and Special Expressions, Next: Anchoring, Prev: Character Classes and Bracket Expressions, Up: Regular Expressions + +3.3 The Backslash Character and Special Expressions +=================================================== + +The ‘\’ character followed by a special character is a regular +expression that matches the special character. The ‘\’ character, when +followed by certain ordinary characters, takes a special meaning: + +‘\b’ + Match the empty string at the edge of a word. + +‘\B’ + Match the empty string provided it’s not at the edge of a word. + +‘\<’ + Match the empty string at the beginning of a word. + +‘\>’ + Match the empty string at the end of a word. + +‘\w’ + Match word constituent, it is a synonym for ‘[_[:alnum:]]’. + +‘\W’ + Match non-word constituent, it is a synonym for ‘[^_[:alnum:]]’. + +‘\s’ + Match whitespace, it is a synonym for ‘[[:space:]]’. + +‘\S’ + Match non-whitespace, it is a synonym for ‘[^[:space:]]’. + + For example, ‘\brat\b’ matches the separate word ‘rat’, ‘\Brat\B’ +matches ‘crate’ but not ‘furry rat’. + + +File: grep.info, Node: Anchoring, Next: Back-references and Subexpressions, Prev: The Backslash Character and Special Expressions, Up: Regular Expressions + +3.4 Anchoring +============= + +The caret ‘^’ and the dollar sign ‘$’ are special characters that +respectively match the empty string at the beginning and end of a line. +They are termed “anchors”, since they force the match to be “anchored” +to beginning or end of a line, respectively. + + +File: grep.info, Node: Back-references and Subexpressions, Next: Basic vs Extended, Prev: Anchoring, Up: Regular Expressions + +3.5 Back-references and Subexpressions +====================================== + +The back-reference ‘\N’, where N is a single nonzero digit, matches the +substring previously matched by the Nth parenthesized subexpression of +the regular expression. For example, ‘(a)\1’ matches ‘aa’. If the +parenthesized subexpression does not participate in the match, the +back-reference makes the whole match fail; for example, ‘(a)*\1’ fails +to match ‘a’. If the parenthesized subexpression matches more than one +substring, the back-reference refers to the last matched substring; for +example, ‘^(ab*)*\1$’ matches ‘ababbabb’ but not ‘ababbab’. When +multiple regular expressions are given with ‘-e’ or from a file (‘-f +FILE’), back-references are local to each expression. + + *Note Known Bugs::, for some known problems with back-references. + + +File: grep.info, Node: Basic vs Extended, Next: Character Encoding, Prev: Back-references and Subexpressions, Up: Regular Expressions + +3.6 Basic vs Extended Regular Expressions +========================================= + +In basic regular expressions the characters ‘?’, ‘+’, ‘{’, ‘|’, ‘(’, and +‘)’ lose their special meaning; instead use the backslashed versions +‘\?’, ‘\+’, ‘\{’, ‘\|’, ‘\(’, and ‘\)’. Also, a backslash is needed +before an interval expression’s closing ‘}’, and an unmatched ‘\)’ is +invalid. + + Portable scripts should avoid the following constructs, as POSIX says +they produce undefined results: + + • Extended regular expressions that use back-references. + • Basic regular expressions that use ‘\?’, ‘\+’, or ‘\|’. + • Empty parenthesized regular expressions like ‘()’. + • Empty alternatives (as in, e.g, ‘a|’). + • Repetition operators that immediately follow empty expressions, + unescaped ‘$’, or other repetition operators. + • A backslash escaping an ordinary character (e.g., ‘\S’), unless it + is a back-reference. + • An unescaped ‘[’ that is not part of a bracket expression. + • In extended regular expressions, an unescaped ‘{’ that is not part + of an interval expression. + + Traditional ‘egrep’ did not support interval expressions and some +‘egrep’ implementations use ‘\{’ and ‘\}’ instead, so portable scripts +should avoid interval expressions in ‘grep -E’ patterns and should use +‘[{]’ to match a literal ‘{’. + + GNU ‘grep -E’ attempts to support traditional usage by assuming that +‘{’ is not special if it would be the start of an invalid interval +expression. For example, the command ‘grep -E '{1'’ searches for the +two-character string ‘{1’ instead of reporting a syntax error in the +regular expression. POSIX allows this behavior as an extension, but +portable scripts should avoid it. + + +File: grep.info, Node: Character Encoding, Next: Matching Non-ASCII, Prev: Basic vs Extended, Up: Regular Expressions + +3.7 Character Encoding +====================== + +The ‘LC_CTYPE’ locale specifies the encoding of characters in patterns +and data, that is, whether text is encoded in UTF-8, ASCII, or some +other encoding. *Note Environment Variables::. + + In the ‘C’ or ‘POSIX’ locale, every character is encoded as a single +byte and every byte is a valid character. In more-complex encodings +such as UTF-8, a sequence of multiple bytes may be needed to represent a +character, and some bytes may be encoding errors that do not contribute +to the representation of any character. POSIX does not specify the +behavior of ‘grep’ when patterns or input data contain encoding errors +or null characters, so portable scripts should avoid such usage. As an +extension to POSIX, GNU ‘grep’ treats null characters like any other +character. However, unless the ‘-a’ (‘--binary-files=text’) option is +used, the presence of null characters in input or of encoding errors in +output causes GNU ‘grep’ to treat the file as binary and suppress +details about matches. *Note File and Directory Selection::. + + Regardless of locale, the 103 characters in the POSIX Portable +Character Set (a subset of ASCII) are always encoded as a single byte, +and the 128 ASCII characters have their usual single-byte encodings on +all but oddball platforms. + + +File: grep.info, Node: Matching Non-ASCII, Prev: Character Encoding, Up: Regular Expressions + +3.8 Matching Non-ASCII and Non-printable Characters +=================================================== + +In a regular expression, non-ASCII and non-printable characters other +than newline are not special, and represent themselves. For example, in +a locale using UTF-8 the command ‘grep 'Λ ω'’ (where the white space +between ‘Λ’ and the ‘ω’ is a tab character) searches for ‘Λ’ (Unicode +character U+039B GREEK CAPITAL LETTER LAMBDA), followed by a tab (U+0009 +TAB), followed by ‘ω’ (U+03C9 GREEK SMALL LETTER OMEGA). + + Suppose you want to limit your pattern to only printable characters +(or even only printable ASCII characters) to keep your script readable +or portable, but you also want to match specific non-ASCII or non-null +non-printable characters. If you are using the ‘-P’ (‘--perl-regexp’) +option, PCREs give you several ways to do this. Otherwise, if you are +using Bash, the GNU project’s shell, you can represent these characters +via ANSI-C quoting. For example, the Bash commands ‘grep $'Λ\tω'’ and +‘grep $'\u039B\t\u03C9'’ both search for the same three-character string +‘Λ ω’ mentioned earlier. However, because Bash translates ANSI-C +quoting before ‘grep’ sees the pattern, this technique should not be +used to match printable ASCII characters; for example, ‘grep $'\u005E'’ +is equivalent to ‘grep '^'’ and matches any line, not just lines +containing the character ‘^’ (U+005E CIRCUMFLEX ACCENT). + + Since PCREs and ANSI-C quoting are GNU extensions to POSIX, portable +shell scripts written in ASCII should use other methods to match +specific non-ASCII characters. For example, in a UTF-8 locale the +command ‘grep "$(printf '\316\233\t\317\211\n')"’ is a portable albeit +hard-to-read alternative to Bash’s ‘grep $'Λ\tω'’. However, none of +these techniques will let you put a null character directly into a +command-line pattern; null characters can appear only in a pattern +specified via the ‘-f’ (‘--file’) option. + + +File: grep.info, Node: Usage, Next: Performance, Prev: Regular Expressions, Up: Top + +4 Usage +******* + +Here is an example command that invokes GNU ‘grep’: + + grep -i 'hello.*world' menu.h main.c + +This lists all lines in the files ‘menu.h’ and ‘main.c’ that contain the +string ‘hello’ followed by the string ‘world’; this is because ‘.*’ +matches zero or more characters within a line. *Note Regular +Expressions::. The ‘-i’ option causes ‘grep’ to ignore case, causing it +to match the line ‘Hello, world!’, which it would not otherwise match. + + Here is a more complex example, showing the location and contents of +any line containing ‘f’ and ending in ‘.c’, within all files in the +current directory whose names start with non-‘.’, contain ‘g’, and end +in ‘.h’. The ‘-n’ option outputs line numbers, the ‘--’ argument treats +any later arguments as file names not options even if ‘*g*.h’ expands to +a file name that starts with ‘-’, and the empty file ‘/dev/null’ causes +file names to be output even if only one file name happens to be of the +form ‘*g*.h’. + + grep -n -- 'f.*\.c$' *g*.h /dev/null + +Note that the regular expression syntax used in the pattern differs from +the globbing syntax that the shell uses to match file names. + + *Note Invoking::, for more details about how to invoke ‘grep’. + + Here are some common questions and answers about ‘grep’ usage. + + 1. How can I list just the names of matching files? + + grep -l 'main' test-*.c + + lists names of ‘test-*.c’ files in the current directory whose + contents mention ‘main’. + + 2. How do I search directories recursively? + + grep -r 'hello' /home/gigi + + searches for ‘hello’ in all files under the ‘/home/gigi’ directory. + For more control over which files are searched, use ‘find’ and + ‘grep’. For example, the following command searches only C files: + + find /home/gigi -name '*.c' ! -type d \ + -exec grep -H 'hello' '{}' + + + This differs from the command: + + grep -H 'hello' /home/gigi/*.c + + which merely looks for ‘hello’ in non-hidden C files in + ‘/home/gigi’ whose names end in ‘.c’. The ‘find’ command line + above is more similar to the command: + + grep -r --include='*.c' 'hello' /home/gigi + + 3. What if a pattern or file has a leading ‘-’? + + grep -- '--cut here--' * + + searches for all lines matching ‘--cut here--’. Without ‘--’, + ‘grep’ would attempt to parse ‘--cut here--’ as a list of options, + and there would be similar problems with any file names beginning + with ‘-’. + + Alternatively, you can prevent misinterpretation of leading ‘-’ by + using ‘-e’ for patterns and leading ‘./’ for files: + + grep -e '--cut here--' ./* + + 4. Suppose I want to search for a whole word, not a part of a word? + + grep -w 'hello' test*.log + + searches only for instances of ‘hello’ that are entire words; it + does not match ‘Othello’. For more control, use ‘\<’ and ‘\>’ to + match the start and end of words. For example: + + grep 'hello\>' test*.log + + searches only for words ending in ‘hello’, so it matches the word + ‘Othello’. + + 5. How do I output context around the matching lines? + + grep -C 2 'hello' test*.log + + prints two lines of context around each matching line. + + 6. How do I force ‘grep’ to print the name of the file? + + Append ‘/dev/null’: + + grep 'eli' /etc/passwd /dev/null + + gets you: + + /etc/passwd:eli:x:2098:1000:Eli Smith:/home/eli:/bin/bash + + Alternatively, use ‘-H’, which is a GNU extension: + + grep -H 'eli' /etc/passwd + + 7. Why do people use strange regular expressions on ‘ps’ output? + + ps -ef | grep '[c]ron' + + If the pattern had been written without the square brackets, it + would have matched not only the ‘ps’ output line for ‘cron’, but + also the ‘ps’ output line for ‘grep’. Note that on some platforms, + ‘ps’ limits the output to the width of the screen; ‘grep’ does not + have any limit on the length of a line except the available memory. + + 8. Why does ‘grep’ report “Binary file matches”? + + If ‘grep’ listed all matching “lines” from a binary file, it would + probably generate output that is not useful, and it might even muck + up your display. So GNU ‘grep’ suppresses output from files that + appear to be binary files. To force GNU ‘grep’ to output lines + even from files that appear to be binary, use the ‘-a’ or + ‘--binary-files=text’ option. To eliminate the “Binary file + matches” messages, use the ‘-I’ or ‘--binary-files=without-match’ + option, or the ‘-s’ or ‘--no-messages’ option. + + 9. Why doesn’t ‘grep -lv’ print non-matching file names? + + ‘grep -lv’ lists the names of all files containing one or more + lines that do not match. To list the names of all files that + contain no matching lines, use the ‘-L’ or ‘--files-without-match’ + option. + + 10. I can do “OR” with ‘|’, but what about “AND”? + + grep 'paul' /etc/motd | grep 'franc,ois' + + finds all lines that contain both ‘paul’ and ‘franc,ois’. + + 11. Why does the empty pattern match every input line? + + The ‘grep’ command searches for lines that contain strings that + match a pattern. Every line contains the empty string, so an empty + pattern causes ‘grep’ to find a match on each line. It is not the + only such pattern: ‘^’, ‘$’, and many other patterns cause ‘grep’ + to match every line. + + To match empty lines, use the pattern ‘^$’. To match blank lines, + use the pattern ‘^[[:blank:]]*$’. To match no lines at all, use + the command ‘grep -f /dev/null’. + + 12. How can I search in both standard input and in files? + + Use the special file name ‘-’: + + cat /etc/passwd | grep 'alain' - /etc/motd + + 13. Why is this back-reference failing? + + echo 'ba' | grep -E '(a)\1|b\1' + + This outputs an error message, because the second ‘\1’ has nothing + to refer back to, meaning it will never match anything. + + 14. How can I match across lines? + + Standard grep cannot do this, as it is fundamentally line-based. + Therefore, merely using the ‘[:space:]’ character class does not + match newlines in the way you might expect. + + With the GNU ‘grep’ option ‘-z’ (‘--null-data’), each input and + output “line” is null-terminated; *note Other Options::. Thus, you + can match newlines in the input, but typically if there is a match + the entire input is output, so this usage is often combined with + output-suppressing options like ‘-q’, e.g.: + + printf 'foo\nbar\n' | grep -z -q 'foo[[:space:]]\+bar' + + If this does not suffice, you can transform the input before giving + it to ‘grep’, or turn to ‘awk’, ‘sed’, ‘perl’, or many other + utilities that are designed to operate across lines. + + 15. What do ‘grep’, ‘fgrep’, and ‘egrep’ stand for? + + The name ‘grep’ comes from the way line editing was done on Unix. + For example, ‘ed’ uses the following syntax to print a list of + matching lines on the screen: + + global/regular expression/print + g/re/p + + ‘fgrep’ stands for Fixed ‘grep’; ‘egrep’ stands for Extended + ‘grep’. + + +File: grep.info, Node: Performance, Next: Reporting Bugs, Prev: Usage, Up: Top + +5 Performance +************* + +Typically ‘grep’ is an efficient way to search text. However, it can be +quite slow in some cases, and it can search large files where even minor +performance tweaking can help significantly. Although the algorithm +used by ‘grep’ is an implementation detail that can change from release +to release, understanding its basic strengths and weaknesses can help +you improve its performance. + + The ‘grep’ command operates partly via a set of automata that are +designed for efficiency, and partly via a slower matcher that takes over +when the fast matchers run into unusual features like back-references. +When feasible, the Boyer–Moore fast string searching algorithm is used +to match a single fixed pattern, and the Aho–Corasick algorithm is used +to match multiple fixed patterns. + + Generally speaking ‘grep’ operates more efficiently in single-byte +locales, since it can avoid the special processing needed for multi-byte +characters. If your patterns will work just as well that way, setting +‘LC_ALL’ to a single-byte locale can help performance considerably. +Setting ‘LC_ALL='C'’ can be particularly efficient, as ‘grep’ is tuned +for that locale. + + Outside the ‘C’ locale, case-insensitive search, and search for +bracket expressions like ‘[a-z]’ and ‘[[=a=]b]’, can be surprisingly +inefficient due to difficulties in fast portable access to concepts like +multi-character collating elements. + + A back-reference such as ‘\1’ can hurt performance significantly in +some cases, since back-references cannot in general be implemented via a +finite state automaton, and instead trigger a backtracking algorithm +that can be quite inefficient. For example, although the pattern +‘^(.*)\1{14}(.*)\2{13}$’ matches only lines whose lengths can be written +as a sum 15x + 14y for nonnegative integers x and y, the pattern matcher +does not perform linear Diophantine analysis and instead backtracks +through all possible matching strings, using an algorithm that is +exponential in the worst case. + + On some operating systems that support files with holes—large regions +of zeros that are not physically present on secondary storage—‘grep’ can +skip over the holes efficiently without needing to read the zeros. This +optimization is not available if the ‘-a’ (‘--binary-files=text’) option +is used (*note File and Directory Selection::), unless the ‘-z’ +(‘--null-data’) option is also used (*note Other Options::). + + For more about the algorithms used by ‘grep’ and about related string +matching algorithms, see: + + • Aho AV. Algorithms for finding patterns in strings. In: van Leeuwen + J. _Handbook of Theoretical Computer Science_, vol. A. New York: + Elsevier; 1990. p. 255–300. This surveys classic string matching + algorithms, some of which are used by ‘grep’. + + • Aho AV, Corasick MJ. Efficient string matching: an aid to + bibliographic search. _CACM_. 1975;18(6):333–40. + <https://dx.doi.org/10.1145/360825.360855>. This introduces the + Aho–Corasick algorithm. + + • Boyer RS, Moore JS. A fast string searching algorithm. _CACM_. + 1977;20(10):762–72. <https://dx.doi.org/10.1145/359842.359859>. + This introduces the Boyer–Moore algorithm. + + • Faro S, Lecroq T. The exact online string matching problem: a + review of the most recent results. _ACM Comput Surv_. + 2013;45(2):13. <https://dx.doi.org/10.1145/2431211.2431212>. This + surveys string matching algorithms that might help improve the + performance of ‘grep’ in the future. + + +File: grep.info, Node: Reporting Bugs, Next: Copying, Prev: Performance, Up: Top + +6 Reporting bugs +**************** + +Bug reports can be found at the GNU bug report logs for ‘grep’ +(https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep). If you find a +bug not listed there, please email it to <bug-grep@gnu.org> to create a +new bug report. + +* Menu: + +* Known Bugs:: + + +File: grep.info, Node: Known Bugs, Up: Reporting Bugs + +6.1 Known Bugs +============== + +Large repetition counts in the ‘{n,m}’ construct may cause ‘grep’ to use +lots of memory. In addition, certain other obscure regular expressions +require exponential time and space, and may cause ‘grep’ to run out of +memory. + + Back-references can greatly slow down matching, as they can generate +exponentially many matching possibilities that can consume both time and +memory to explore. Also, the POSIX specification for back-references is +at times unclear. Furthermore, many regular expression implementations +have back-reference bugs that can cause programs to return incorrect +answers or even crash, and fixing these bugs has often been +low-priority: for example, as of 2021 the GNU C library bug database +(https://sourceware.org/bugzilla/) contained back-reference bugs 52, +10844, 11053, 24269 and 25322, with little sign of forthcoming fixes. +Luckily, back-references are rarely useful and it should be little +trouble to avoid them in practical applications. + + +File: grep.info, Node: Copying, Next: Index, Prev: Reporting Bugs, Up: Top + +7 Copying +********* + +GNU ‘grep’ is licensed under the GNU GPL, which makes it “free +software”. + + The “free” in “free software” refers to liberty, not price. As some +GNU project advocates like to point out, think of “free speech” rather +than “free beer”. In short, you have the right (freedom) to run and +change ‘grep’ and distribute it to other people, and—if you want—charge +money for doing either. The important restriction is that you have to +grant your recipients the same rights and impose the same restrictions. + + This general method of licensing software is sometimes called “open +source”. The GNU project prefers the term “free software” for reasons +outlined at +<https://www.gnu.org/philosophy/open-source-misses-the-point.html>. + + This manual is free documentation in the same sense. The +documentation license is included below. The license for the program is +available with the source code, or at +<https://www.gnu.org/licenses/gpl.html>. + +* Menu: + +* GNU Free Documentation License:: + + +File: grep.info, Node: GNU Free Documentation License, Up: Copying + +7.1 GNU Free Documentation License +================================== + + Version 1.3, 3 November 2008 + + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <https://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “free” in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of “copyleft”, which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + “Document”, below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as “you”. You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A “Modified Version” of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A “Secondary Section” is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document’s overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The “Invariant Sections” are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The “Cover Texts” are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A “Transparent” copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + “Transparent” is called “Opaque”. + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The “Title Page” means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, “Title + Page” means the text near the most prominent appearance of the + work’s title, preceding the beginning of the body of the text. + + The “publisher” means any person or entity that distributes copies + of the Document to the public. + + A section “Entitled XYZ” means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) + To “Preserve the Title” of such a section when you modify the + Document means that it remains a section “Entitled XYZ” according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document’s license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document’s + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled “History”, Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled “History” in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + “History” section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled “Acknowledgements” or “Dedications”, + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled “Endorsements”. Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + “Endorsements” or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version’s + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled “Endorsements”, provided it contains + nothing but endorsements of your Modified Version by various + parties—for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition of + a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + “History” in the various original documents, forming one section + Entitled “History”; likewise combine any sections Entitled + “Acknowledgements”, and any sections Entitled “Dedications”. You + must delete all sections Entitled “Endorsements.” + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an “aggregate” if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation’s users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document’s Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <https://www.gnu.org/licenses/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License “or any later version” applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy’s public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A “Massive Multiauthor Collaboration” (or “MMC”) contained in the + site means any set of copyrightable works thus published on the MMC + site. + + “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + “Incorporate” means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is “eligible for relicensing” if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the “with...Texts.” line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: grep.info, Node: Index, Prev: Copying, Up: Top + +Index +***** + + +* Menu: + +* *: Fundamental Structure. + (line 22) +* +: Fundamental Structure. + (line 25) +* --: Other Options. (line 7) +* --after-context: Context Line Control. + (line 15) +* --basic-regexp: grep Programs. (line 15) +* --before-context: Context Line Control. + (line 19) +* --binary: Other Options. (line 22) +* --binary-files: File and Directory Selection. + (line 12) +* --byte-offset: Output Line Prefix Control. + (line 12) +* --color: General Output Control. + (line 14) +* --colour: General Output Control. + (line 14) +* --context: Context Line Control. + (line 24) +* --count: General Output Control. + (line 8) +* --dereference-recursive: File and Directory Selection. + (line 113) +* --devices: File and Directory Selection. + (line 51) +* --directories: File and Directory Selection. + (line 62) +* --exclude: File and Directory Selection. + (line 73) +* --exclude-dir: File and Directory Selection. + (line 87) +* --exclude-from: File and Directory Selection. + (line 83) +* --extended-regexp: grep Programs. (line 20) +* --file: Matching Control. (line 17) +* --files-with-matches: General Output Control. + (line 34) +* --files-without-match: General Output Control. + (line 29) +* --fixed-strings: grep Programs. (line 25) +* --group-separator: Context Line Control. + (line 27) +* --group-separator <1>: Context Line Control. + (line 31) +* --help: Generic Program Information. + (line 7) +* --ignore-case: Matching Control. (line 26) +* --include: File and Directory Selection. + (line 97) +* --initial-tab: Output Line Prefix Control. + (line 41) +* --invert-match: Matching Control. (line 51) +* --label: Output Line Prefix Control. + (line 28) +* --line-buffered: Other Options. (line 13) +* --line-number: Output Line Prefix Control. + (line 36) +* --line-regexp: Matching Control. (line 73) +* --max-count: General Output Control. + (line 40) +* --no-filename: Output Line Prefix Control. + (line 23) +* --no-ignore-case: Matching Control. (line 44) +* --no-messages: General Output Control. + (line 85) +* --null: Output Line Prefix Control. + (line 50) +* --null-data: Other Options. (line 43) +* --only-matching: General Output Control. + (line 70) +* --perl-regexp: grep Programs. (line 30) +* --quiet: General Output Control. + (line 78) +* --recursive: File and Directory Selection. + (line 105) +* --regexp=PATTERNS: Matching Control. (line 8) +* --silent: General Output Control. + (line 78) +* --text: File and Directory Selection. + (line 8) +* --version: Generic Program Information. + (line 12) +* --with-filename: Output Line Prefix Control. + (line 18) +* --word-regexp: Matching Control. (line 56) +* -A: Context Line Control. + (line 15) +* -a: File and Directory Selection. + (line 8) +* -b: Output Line Prefix Control. + (line 12) +* -B: Context Line Control. + (line 19) +* -c: General Output Control. + (line 8) +* -C: Context Line Control. + (line 24) +* -D: File and Directory Selection. + (line 51) +* -d: File and Directory Selection. + (line 62) +* -e: Matching Control. (line 8) +* -E: grep Programs. (line 20) +* -f: Matching Control. (line 17) +* -F: grep Programs. (line 25) +* -G: grep Programs. (line 15) +* -H: Output Line Prefix Control. + (line 18) +* -h: Output Line Prefix Control. + (line 23) +* -i: Matching Control. (line 26) +* -L: General Output Control. + (line 29) +* -l: General Output Control. + (line 34) +* -m: General Output Control. + (line 40) +* -n: Output Line Prefix Control. + (line 36) +* -NUM: Context Line Control. + (line 24) +* -o: General Output Control. + (line 70) +* -P: grep Programs. (line 30) +* -q: General Output Control. + (line 78) +* -r: File and Directory Selection. + (line 105) +* -R: File and Directory Selection. + (line 113) +* -s: General Output Control. + (line 85) +* -T: Output Line Prefix Control. + (line 41) +* -U: Other Options. (line 22) +* -V: Generic Program Information. + (line 12) +* -v: Matching Control. (line 51) +* -w: Matching Control. (line 56) +* -x: Matching Control. (line 73) +* -y: Matching Control. (line 26) +* -Z: Output Line Prefix Control. + (line 50) +* -z: Other Options. (line 43) +* .: Fundamental Structure. + (line 11) +* ?: Fundamental Structure. + (line 19) +* _N_GNU_nonoption_argv_flags_ environment variable: Environment Variables. + (line 178) +* {,M}: Fundamental Structure. + (line 34) +* {N,M}: Fundamental Structure. + (line 38) +* {N,}: Fundamental Structure. + (line 31) +* {N}: Fundamental Structure. + (line 28) +* after context: Context Line Control. + (line 15) +* alnum character class: Character Classes and Bracket Expressions. + (line 31) +* alpha character class: Character Classes and Bracket Expressions. + (line 36) +* alphabetic characters: Character Classes and Bracket Expressions. + (line 36) +* alphanumeric characters: Character Classes and Bracket Expressions. + (line 31) +* anchoring: Anchoring. (line 6) +* asterisk: Fundamental Structure. + (line 22) +* back-reference: Back-references and Subexpressions. + (line 6) +* back-references: Performance. (line 32) +* backslash: The Backslash Character and Special Expressions. + (line 6) +* basic regular expressions: Basic vs Extended. (line 6) +* before context: Context Line Control. + (line 19) +* binary files: File and Directory Selection. + (line 8) +* binary files <1>: File and Directory Selection. + (line 12) +* binary I/O: Other Options. (line 22) +* blank character class: Character Classes and Bracket Expressions. + (line 41) +* blank characters: Character Classes and Bracket Expressions. + (line 41) +* bn GREP_COLORS capability: Environment Variables. + (line 121) +* braces, first argument omitted: Fundamental Structure. + (line 34) +* braces, one argument: Fundamental Structure. + (line 28) +* braces, second argument omitted: Fundamental Structure. + (line 31) +* braces, two arguments: Fundamental Structure. + (line 38) +* bracket expression: Character Classes and Bracket Expressions. + (line 6) +* Bugs, known: Known Bugs. (line 6) +* bugs, reporting: Reporting Bugs. (line 6) +* byte offset: Output Line Prefix Control. + (line 12) +* case insensitive search: Matching Control. (line 26) +* case insensitive search <1>: Performance. (line 27) +* changing name of standard input: Output Line Prefix Control. + (line 28) +* character class: Character Classes and Bracket Expressions. + (line 6) +* character classes: Character Classes and Bracket Expressions. + (line 30) +* character encoding: Character Encoding. (line 6) +* character type: Environment Variables. + (line 148) +* classes of characters: Character Classes and Bracket Expressions. + (line 30) +* cntrl character class: Character Classes and Bracket Expressions. + (line 44) +* context lines: General Output Control. + (line 62) +* context lines <1>: Context Line Control. + (line 6) +* context lines <2>: Context Line Control. + (line 24) +* context lines, after match: Context Line Control. + (line 15) +* context lines, before match: Context Line Control. + (line 19) +* control characters: Character Classes and Bracket Expressions. + (line 44) +* copying: Copying. (line 6) +* counting lines: General Output Control. + (line 8) +* cx GREP_COLORS capability: Environment Variables. + (line 72) +* device search: File and Directory Selection. + (line 51) +* digit character class: Character Classes and Bracket Expressions. + (line 49) +* digit characters: Character Classes and Bracket Expressions. + (line 49) +* directory search: File and Directory Selection. + (line 62) +* dot: Fundamental Structure. + (line 11) +* encoding error: Environment Variables. + (line 155) +* environment variables: Environment Variables. + (line 44) +* exclude directories: File and Directory Selection. + (line 87) +* exclude files: File and Directory Selection. + (line 73) +* exclude files <1>: File and Directory Selection. + (line 83) +* exit status: Exit Status. (line 6) +* FAQ about grep usage: Usage. (line 32) +* files which don’t match: General Output Control. + (line 29) +* fn GREP_COLORS capability: Environment Variables. + (line 111) +* fn GREP_COLORS capability <1>: Environment Variables. + (line 126) +* graph character class: Character Classes and Bracket Expressions. + (line 52) +* graphic characters: Character Classes and Bracket Expressions. + (line 52) +* grep programs: grep Programs. (line 6) +* GREP_COLOR environment variable: Environment Variables. + (line 45) +* GREP_COLORS environment variable: Environment Variables. + (line 56) +* group separator: Context Line Control. + (line 27) +* group separator <1>: Context Line Control. + (line 31) +* hexadecimal digits: Character Classes and Bracket Expressions. + (line 76) +* highlight markers: Environment Variables. + (line 45) +* highlight markers <1>: Environment Variables. + (line 56) +* highlight, color, colour: General Output Control. + (line 14) +* holes in files: Performance. (line 42) +* include files: File and Directory Selection. + (line 97) +* interval expressions: Fundamental Structure. + (line 14) +* interval expressions <1>: Basic vs Extended. (line 27) +* invert matching: Matching Control. (line 51) +* LANG environment variable: Environment Variables. + (line 9) +* LANG environment variable <1>: Environment Variables. + (line 148) +* LANG environment variable <2>: Environment Variables. + (line 155) +* LANG environment variable <3>: Environment Variables. + (line 164) +* LANGUAGE environment variable: Environment Variables. + (line 9) +* LANGUAGE environment variable <1>: Environment Variables. + (line 164) +* language of messages: Environment Variables. + (line 164) +* LC_ALL environment variable: Environment Variables. + (line 9) +* LC_ALL environment variable <1>: Environment Variables. + (line 148) +* LC_ALL environment variable <2>: Environment Variables. + (line 155) +* LC_ALL environment variable <3>: Environment Variables. + (line 164) +* LC_COLLATE environment variable: Environment Variables. + (line 148) +* LC_CTYPE environment variable: Environment Variables. + (line 155) +* LC_MESSAGES environment variable: Environment Variables. + (line 9) +* LC_MESSAGES environment variable <1>: Environment Variables. + (line 164) +* line buffering: Other Options. (line 13) +* line numbering: Output Line Prefix Control. + (line 36) +* ln GREP_COLORS capability: Environment Variables. + (line 116) +* locales: Performance. (line 20) +* lower character class: Character Classes and Bracket Expressions. + (line 55) +* lower-case letters: Character Classes and Bracket Expressions. + (line 55) +* match expression at most M times: Fundamental Structure. + (line 34) +* match expression at most once: Fundamental Structure. + (line 19) +* match expression from N to M times: Fundamental Structure. + (line 38) +* match expression N or more times: Fundamental Structure. + (line 31) +* match expression N times: Fundamental Structure. + (line 28) +* match expression one or more times: Fundamental Structure. + (line 25) +* match expression zero or more times: Fundamental Structure. + (line 22) +* match the whole line: Matching Control. (line 73) +* matching basic regular expressions: grep Programs. (line 15) +* matching extended regular expressions: grep Programs. (line 20) +* matching fixed strings: grep Programs. (line 25) +* matching Perl-compatible regular expressions: grep Programs. + (line 30) +* matching whole words: Matching Control. (line 56) +* max-count: General Output Control. + (line 40) +* mc GREP_COLORS capability: Environment Variables. + (line 103) +* message language: Environment Variables. + (line 164) +* ms GREP_COLORS capability: Environment Variables. + (line 95) +* MS-Windows binary I/O: Other Options. (line 22) +* mt GREP_COLORS capability: Environment Variables. + (line 87) +* names of matching files: General Output Control. + (line 34) +* national language support: Environment Variables. + (line 148) +* national language support <1>: Environment Variables. + (line 164) +* ne GREP_COLORS capability: Environment Variables. + (line 133) +* NLS: Environment Variables. + (line 148) +* no filename prefix: Output Line Prefix Control. + (line 23) +* non-ASCII matching: Matching Non-ASCII. (line 6) +* non-printable matching: Matching Non-ASCII. (line 6) +* null character: Environment Variables. + (line 155) +* numeric characters: Character Classes and Bracket Expressions. + (line 49) +* only matching: General Output Control. + (line 70) +* option delimiter: Other Options. (line 7) +* ordinary characters: Fundamental Structure. + (line 6) +* patterns from file: Matching Control. (line 17) +* patterns option: Matching Control. (line 8) +* performance: Performance. (line 6) +* period: Fundamental Structure. + (line 11) +* plus sign: Fundamental Structure. + (line 25) +* POSIXLY_CORRECT environment variable: Environment Variables. + (line 169) +* print character class: Character Classes and Bracket Expressions. + (line 59) +* print non-matching lines: Matching Control. (line 51) +* printable characters: Character Classes and Bracket Expressions. + (line 59) +* punct character class: Character Classes and Bracket Expressions. + (line 62) +* punctuation characters: Character Classes and Bracket Expressions. + (line 62) +* question mark: Fundamental Structure. + (line 19) +* quiet, silent: General Output Control. + (line 78) +* range expression: Character Classes and Bracket Expressions. + (line 14) +* recursive search: File and Directory Selection. + (line 105) +* recursive search <1>: File and Directory Selection. + (line 113) +* regular expressions: Regular Expressions. (line 6) +* return status: Exit Status. (line 6) +* rv GREP_COLORS capability: Environment Variables. + (line 81) +* searching directory trees: File and Directory Selection. + (line 73) +* searching directory trees <1>: File and Directory Selection. + (line 83) +* searching directory trees <2>: File and Directory Selection. + (line 97) +* searching directory trees <3>: File and Directory Selection. + (line 105) +* searching directory trees <4>: File and Directory Selection. + (line 113) +* searching for patterns: Introduction. (line 6) +* sl GREP_COLORS capability: Environment Variables. + (line 64) +* space character class: Character Classes and Bracket Expressions. + (line 67) +* space characters: Character Classes and Bracket Expressions. + (line 67) +* special characters: Fundamental Structure. + (line 6) +* subexpression: Back-references and Subexpressions. + (line 6) +* suppress binary data: File and Directory Selection. + (line 8) +* suppress error messages: General Output Control. + (line 85) +* symbolic links: File and Directory Selection. + (line 62) +* symbolic links <1>: File and Directory Selection. + (line 105) +* symbolic links <2>: File and Directory Selection. + (line 113) +* tab-aligned content lines: Output Line Prefix Control. + (line 41) +* translation of message language: Environment Variables. + (line 164) +* upper character class: Character Classes and Bracket Expressions. + (line 72) +* upper-case letters: Character Classes and Bracket Expressions. + (line 72) +* usage summary, printing: Generic Program Information. + (line 7) +* usage, examples: Usage. (line 6) +* using grep, Q&A: Usage. (line 32) +* variants of grep: grep Programs. (line 6) +* version, printing: Generic Program Information. + (line 12) +* whitespace characters: Character Classes and Bracket Expressions. + (line 67) +* with filename prefix: Output Line Prefix Control. + (line 18) +* xdigit character class: Character Classes and Bracket Expressions. + (line 76) +* xdigit class: Character Classes and Bracket Expressions. + (line 76) +* zero-terminated file names: Output Line Prefix Control. + (line 50) +* zero-terminated lines: Other Options. (line 43) + + + +Tag Table: +Node: Top773 +Node: Introduction1965 +Node: Invoking2708 +Node: Command-line Options3551 +Node: Generic Program Information4434 +Node: Matching Control4908 +Node: General Output Control8537 +Ref: General Output Control-Footnote-112636 +Node: Output Line Prefix Control12705 +Node: Context Line Control15061 +Node: File and Directory Selection17124 +Node: Other Options22916 +Node: Environment Variables25129 +Node: Exit Status35125 +Node: grep Programs35603 +Node: Regular Expressions37234 +Node: Fundamental Structure38475 +Node: Character Classes and Bracket Expressions40359 +Ref: invalid-bracket-expr43984 +Node: The Backslash Character and Special Expressions45222 +Node: Anchoring46413 +Node: Back-references and Subexpressions46875 +Node: Basic vs Extended47879 +Node: Character Encoding49888 +Node: Matching Non-ASCII51354 +Node: Usage53481 +Node: Performance61173 +Node: Reporting Bugs64873 +Node: Known Bugs65250 +Node: Copying66321 +Node: GNU Free Documentation License67449 +Node: Index92754 + +End Tag Table + + +Local Variables: +coding: utf-8 +End: |