grep

本文档提供了Grep 2.9版本的详细介绍,包括命令行选项、环境变量、退出状态等内容。涵盖基本正则表达式、扩展正则表达式及Perl正则表达式的使用方法,并附有常见应用场景实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GNU Grep 2.9


Next:  ,Up:  (dir)

grep

grep prints lines that match a pattern.

This manual is for version 2.9 of GNU Grep.

This manual is for grep, a pattern matching engine.

Copyright © 1999-2002, 2005, 2008-2011 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this documentunder the terms of the GNU Free Documentation License, Version 1.3 orany later version published by the Free Software Foundation; with noInvariant Sections, with no Front-Cover Texts, and with no Back-CoverTexts. A copy of the license is included in the section entitled“GNU Free Documentation License”.


Next:  ,Previous:  Top,Up:  Top

1 Introduction

grep searches the input filesfor lines containing a match to a given pattern list. 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.


Next:  ,Previous:  Introduction,Up:  Top

2 Invoking grep

The general synopsis of the grep command line is

     grep options pattern input_file_names

There can be zero or more options. pattern will only be seen as such(and not as aninput_file_name)if it wasn't already specified within options(by using the ‘-epattern’or ‘-f file’ options). There can be zero or moreinput_file_names.

2.1 Command-line Options

grep comes with a rich set of options:some fromposix.2 and some being gnu extensions. Long option names are always agnu extension,even for options that are from posix specifications. Options that are specified by posix,under their short names,are explicitly marked as suchto facilitateposix-portable programming. A few option names are providedfor compatibility with older or more exotic implementations.

Several additional options controlwhich variant of the grep matching engine is used. Seegrep Programs.

2.1.1 Generic Program Information
--help
Print a usage message briefly summarizing the command-line optionsand 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.
2.1.2 Matching Control
-e pattern’ ‘ --regexp=pattern
Use pattern as the pattern. This can be used to specify multiple search patterns,or to protect a pattern beginning with a ‘ -’. (‘ -e’ is specified by posix.)
-f file’ ‘ --file=file
Obtain patterns from file, one per line. The empty file contains zero patterns, and therefore matches nothing. (‘ -f’ is specified by posix.)
-i’ ‘ -y’ ‘ --ignore-case
Ignore case distinctions in both the pattern and the input files. ‘ -y’ is an obsolete synonym that is provided for compatibility. (‘ -i’ is specified by posix.)
-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 eitherbe at the beginning of the line,or preceded by a non-word constituent character. Similarly,it must be either at the end of the lineor followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore.
-x’ ‘ --line-regexp
Select only those matches that exactly match the whole line. (‘ -x’ is specified by posix.)
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 andgroups of context lines) with escape sequences to display them in coloron the terminal. The colors are defined by the environment variable GREP_COLORSand 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 whichno output would normally have been printed. The scanning of every file will stop on the first match.
-l’ ‘ --files-with-matches
Suppress normal output;instead print the name of each input file from whichoutput would normally have been printed. The scanning of every file will stop on the first match. (‘ -l’ is specified by posix.)
-m num’ ‘ --max-count=num
Stop reading a file after num matching lines. If the input is standard input from a regular file,and num matching lines are output, grep ensures that the standard input is positionedjust after the last matching 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 regularfile:

          # This probably will not work.
          cat FILE |
          while grep -m 1 PATTERN
          do
            echo xxxx
          done

When grep stops after num matching lines,it outputs any trailing context lines. Since context does not include matching lines,grep will stop when it encounters another matching line. When the ‘-c’ or ‘--count’ option is also used,grep does not output a count greater thannum. When the ‘-v’ or ‘--invert-match’ option is also used,grep stops after outputtingnum 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.
-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. 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 redirectstandard and error output to /dev/null instead. (‘ -s’ is specified by posix.)

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 filebefore each line of output. If ‘ -o’ (‘ --only-matching’) is specified,print the offset of the matching part itself. When grep runs on ms-dos or ms-Windows,the printed byte offsets depend on whetherthe ‘ -u’ (‘ --unix-byte-offsets’) option is used;see below.
-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 inputas input coming from file LABEL. This isespecially useful when implementing tools like zgrep; e.g.:
          gzip -cd foo.gz | grep --label=foo -H something

-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’. In order to improve the probability that linesfrom a single file will all start at the same column,this also causes the line number and byte offset (if present)to be printed in a minimum-size field width.
-u’ ‘ --unix-byte-offsets
Report Unix-style byte offsets. This option causes grep to report byte offsetsas if the file were a Unix-style text file,i.e., the byte offsets ignore the CR characters that were stripped. This will produce results identicalto running grep on a Unix machine. This option has no effect unless the ‘ -b’ option is also used;it has no effect on platforms other than ms-dos and ms-Windows.
-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 nameinstead 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.
2.1.5 Context Line Control

Regardless of how these options are set,grep will never print any given line more than once. If the ‘-o’ or ‘--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 ‘ --’ around disjoint groupsof lines.
--no-group-separator
When -A, -B or -C are in use,print disjoint groups of lines adjacent to each other.

Matching lines normally use ‘:’ as a separatorbetween prefix fields and actual line content. Context (i.e., non-matching) lines use ‘-’ instead. When no context is specified,matching lines are simply output one right after another. When nonzero context is specified,lines that are adjacent in the input form a groupand are output one right after another, whilea separator appears by default between disjoint groups on a lineof its own and without any prefix. The default separatoris ‘--’, however whether to include it and its appearancecan be changed with the options above. Each group may containseveral matching lines when they are close enough to each otherthat two otherwise adjacent but divided groups connectand can just merge into a single contiguous one.

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 the first few bytes of a file indicate that the file contains binary data,assume that the file is of type type. By default, type is ‘ binary’,and grep normally outputs eithera one-line message saying that a binary file matches,or no message if there is no match. If type is ‘ without-match’, grep assumes that a binary file does not match;this is equivalent to the ‘ -I’ option. If type is ‘ text’, grep processes a binary file as if it were text;this is equivalent to the ‘ -a’ option. Warning:--binary-files=text’ might output binary garbage,which can have nasty side effectsif the output is a terminal andif the terminal driver interprets some of it as commands.
-D action’ ‘ --devices=action
If an input file is a device, FIFO, or socket, use action to process it. By default, action is ‘ read’,which means that devices are read just as if they were ordinary files. If action is ‘ skip’,devices, FIFOs, and sockets are silently skipped.
-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 grepto 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;this is equivalent to the ‘ -r’ option.
--exclude=glob
Skip files whose base name matches glob(using wildcard matching). A file-name glob can use‘ *’, ‘ ?’, and ‘ [’...‘ ]’ as wildcards,and \ to quote a wildcard or backslash character literally.
--exclude-from=file
Skip files whose base name matches any of the file-name globsread from file (using wildcard matching as describedunder ‘ --exclude’).
--exclude-dir=dir
Exclude directories matching the pattern dir from recursivedirectory searches.
-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 base name matches glob(using wildcard matching as described under ‘ --exclude’).
-r’ ‘ -R’ ‘ --recursive
For each directory mentioned on the command line,read and process all files in that directory, recursively. This is the same as the ‘ --directories=recurse’ option.
2.1.7 Other Options
--line-buffered
Use line buffering on output. This can cause a performance penalty.
--mmap
This option is ignored for backwards compatibility. It used to readinput with the mmap system call, instead of the default readsystem call. On modern systems, mmap would rarely if ever yieldbetter performance.
-U’ ‘ --binary
Treat the file(s) as binary. By default, under ms-dos and ms-Windows, grep guesses the file typeby looking at the contents of the first 32kB read from the file. If grep decides the file is a text file,it strips the CR characters from the original file contents(to make regular expressions with ^ and $ work correctly). Specifying ‘ -U’ overrules this guesswork,causing all files to be read and passed to the matching mechanism verbatim;if the file is a text file with CR/LF pairs at the end of each line,this will cause some regular expressions to fail. This option has no effecton platforms other than ms-dos and ms-Windows.
-z’ ‘ --null-data
Treat the input as a set 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.


Next:  ,Previous:  Command-line Options,Up:  Invoking

2.2 Environment Variables

The behavior of grep is affectedby the following environment variables.

The locale for category LC_foois specified by examining the three environment variablesLC_ALL,LC_foo, and LANG,in that order. The first of these variables that is set specifies the locale. For example, ifLC_ALL is not set,but LC_MESSAGES is set to ‘pt_BR’,then the Brazilian Portuguese locale is usedfor theLC_MESSAGES category. The ‘C’ locale is used if none of these environment variables are set,if the locale catalog is not installed,or ifgrep was not compiledwith national language support (nls).

GREP_OPTIONS
This variable specifies default options to be placed in front of anyexplicit options. For example, if GREP_OPTIONS is‘ --binary-files=without-match --directories=skip’, grepbehaves as if the two options ‘ --binary-files=without-match’ and‘ --directories=skip’ had been specified beforeany explicit options. Option specifications are separated bywhitespace. A backslash escapes the next character, so it can be used tospecify an option containing whitespace or a backslash.
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_COLORShave priority over it. It can only specify the color used to highlightthe 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 attributesused to highlight various parts of the output. Its value is a colon-separated list of capabilitiesthat 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’ capabilityand 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’ capabilityand 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 ofthe ‘ sl=’ and ‘ cx=’ capabilitieswhen 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 only used when the ‘ -v’ command-line option is omitted.) The effect of the ‘ sl=’ (or ‘ cx=’ if ‘ rv’) capabilityremains active when this kicks in. 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 only used when the ‘ -v’ command-line option is specified.) The effect of the ‘ cx=’ (or ‘ sl=’ if ‘ rv’) capabilityremains active when this kicks in. 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 insertedbetween selected line fields (‘ :’),between context line fields (‘ -’),and between groups of adjacent lineswhen 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 lineusing 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 terminalsfor 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.

See the Select Graphic Rendition (SGR) sectionin the documentation of your text terminalfor permitted values and their meaning as character attributes. These substring values are integers in decimal representationand can be concatenated with semicolons.grep takes care of assembling the resultinto 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.

LC_ALL LC_COLLATE LANG
These variables specify the locale for the LC_COLLATE category,which determines the collating sequenceused to interpret range expressions like ‘ [a-z]’.
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.
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.2 requires; otherwise, grep behaves more like other gnu programs. posix.2requires that options thatfollow file names must be treated as file names;by default,such options are permuted to the front of the operand listand are treated as options. Also, POSIXLY_CORRECT disables special handling of aninvalid bracket expression. See 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 expansionand 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.


Next:  ,Previous:  Environment Variables,Up:  Invoking

2.3 Exit Status

Normally, the exit status is 0 if selected lines are found and 1 otherwise. But the exit status is 2 if an error occurred, unless the-q or--quiet or--silent option is used and a selected lineis found. Note, however, thatposix only mandates,for programs such as grep,cmp, and diff,that the exit status in case of error be greater than 1;it is therefore advisable, for the sake of portability,to use logic that tests for this general conditioninstead of strict equality with 2.


Previous:  Exit Status,Up:  Invoking

2.4 grep Programs

grep searches the named input files(or standard input if no files are named,or the file name - is given)for lines containing a match to the given pattern. By default,grep prints the matching lines. There are four major variants ofgrep,controlled by the following options.

-G’ ‘ --basic-regexp
Interpret the pattern as a basic regular expression (BRE). This is the default.
-E’ ‘ --extended-regexp
Interpret the pattern as an extended regular expression (ERE). (‘ -E’ is specified by posix.)
-F’ ‘ --fixed-strings
Interpret the pattern as a list of fixed strings, separatedby newlines, any of which is to be matched. (‘ -F’ is specified by posix.)
-P’ ‘ --perl-regexp
Interpret the pattern as a Perl regular expression. This is highly experimental and‘ grep -P’ may warn of unimplemented features.

In addition,two variant programs egrep andfgrep are available. egrep is the same as ‘grep -E’.fgrep is the same as ‘grep -F’. Direct invocation as eitheregrep orfgrep is deprecated,but is provided to allow historical applicationsthat rely on them to run unmodified.


Next:  ,Previous:  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 understandsthree different versions of regular expression syntax:“basic,” (BRE) “extended” (ERE) and “perl”. Ingnu grep,there is no difference in available functionality between basic andextended 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 regular expressions give additional functionality, and aredocumented in pcresyntax(3) and pcrepattern(3), but may not beavailable on every system.

3.1 Fundamental Structure

The fundamental building blocks are the regular expressions that matcha single character. Most characters, including all letters and digits,are regular expressions that match themselves. Any meta-characterwith special meaning may be quoted by preceding it with a backslash.

A regular expression may be followed by one of severalrepetition operators:

.
The period ‘ .’ matches any single character.
?
The preceding item is optional and will be matched at most once.
*
The preceding item will be matched zero or more times.
+
The preceding item will be 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.
{n,m}
The preceding item is matched at least n times, but not more than m times.

Two regular expressions may be concatenated;the resulting regular expressionmatches any string formed by concatenating two substringsthat respectively match the concatenated expressions.

Two regular expressions may be joined by the infix operator ‘|’;the resulting regular expressionmatches any string matching either alternalte expression.

Repetition takes precedence over concatenation,which in turn takes precedence over alternation. A whole expression may be enclosed in parenthesesto override these precedence rules and form a subexpression.

3.2 Character Classes and Bracket Expressions

Abracket 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. For example, the regular expression‘[0123456789]’ matches any single digit.

Within a bracket expression, a range expression consists of twocharacters separated by a hyphen. It matches any single character thatsorts between the two characters, inclusive, using the locale'scollating sequence and character set. For example, in the default Clocale, ‘[a-d]’ is equivalent to ‘[abcd]’. Many locales sortcharacters in dictionary order, and in these locales ‘[a-d]’ istypically not equivalent to ‘[abcd]’;it might be equivalent to ‘[aBbCcDd]’, for example. To obtain the traditional interpretationof bracket expressions, you can use the ‘C’ locale by setting theLC_ALL environment variable to the value ‘C’.

Finally, certain named classes of characters are predefined withinbracket expressions, as follows. Their interpretation depends on theLC_CTYPE locale;the interpretation below is that of the ‘C’ locale,which is the default if noLC_CTYPE locale is specified.

[:alnum:]
Alphanumeric characters:‘ [:alpha:]’ and ‘ [:digit:]’.
[:alpha:]
Alphabetic characters:‘ [:lower:]’ and ‘ [:upper:]’.
[:blank:]
Blank characters:space and tab.
[:cntrl:]
Control characters. In ascii, these characters have octal codes 000through 037, and 177 ( DEL). In other character sets, these arethe 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: 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: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.
[:space:]
Space characters:tab, newline, vertical tab, form feed, carriage return, and space. See Usage, for more discussion of matching newlines.
[:upper:]
Upper-case letters: 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.
For example, ‘ [[:alnum:]]’ means ‘ [0-9A-Za-z]’, except the latterdepends upon the ‘ C’ locale and the ascii characterencoding, whereas the former is independent of locale and character set. (Note that the brackets in these class names arepart of the symbolic names, and must be included in addition tothe brackets delimiting the bracket expression.)

If you mistakenly omit the outer brackets, and search for say, ‘[:upper:]’,GNUgrep prints a diagnostic and exits with status 2, onthe assumption that you did not intend to search for the nominallyequivalent regular expression: ‘[:epru]’. Set thePOSIXLY_CORRECT environment variable to disable this feature.

Most meta-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 pointof a range.
^
represents the characters not in the list. If you want to make the ‘ ^’character a list item, place it anywhere but first.

3.3 The Backslash Character and Special Expressions

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 word.
\>
Match the empty string at the end of 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’.

3.4 Anchoring

The caret ‘^’ and the dollar sign ‘$’ are meta-characters thatrespectively match the empty string at the beginning and end of a line.


Next:  ,Previous:  Anchoring,Up:  Regular Expressions

3.5 Back-references and Subexpressions

The back-reference ‘\n’, wheren is a single digit, matchesthe substring previously matched by the nth parenthesized subexpressionof the regular expression. For example, ‘(a)\1’ matches ‘aa’. When used with alternation, if the group does not participate in the match thenthe back-reference makes the whole match fail. For example, ‘a(.)|b\1’will not match ‘ba’. When multiple regular expressions are given with‘-e’ or from a file (‘-f file’),back-references are local to each expression.

3.6 Basic vs Extended Regular Expressions

In basic regular expressions the meta-characters ‘?’, ‘+’,‘{’, ‘|’, ‘(’, and ‘)’ lose their special meaning;instead use the backslashed versions ‘\?’, ‘\+’, ‘\{’,‘\|’, ‘\(’, and ‘\)’.

Traditional egrep did not support the ‘{’ meta-character,and someegrep implementations support ‘\{’ instead, soportable scripts should avoid ‘{’ in ‘grep -E’ patterns andshould use ‘[{]’ to match a literal ‘{’.

gnu grep -E attempts to support traditional usage byassuming that ‘{’ is not special if it would be the start of aninvalid interval specification. 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.2 allows this behavior as an extension, but portable scriptsshould avoid it.


Next:  ,Previous:  Regular Expressions,Up:  Top

4 Usage

Here is an example command that invokesgnu grep:

     grep -i 'hello.*world' menu.h main.c

This lists all lines in the files menu.h andmain.c thatcontain the string ‘hello’ followed by the string ‘world’;this is because ‘.*’ matches zero or more characters within a line. See Regular Expressions. The ‘-i’ option causesgrepto ignore case, causing it to match the line ‘Hello, world!’, whichit would not otherwise match. SeeInvoking, for more details abouthow to invoke grep.

Here are some common questions and answers aboutgrep usage.

  1. How can I list just the names of matching files?
              grep -l 'main' *.c
    

    lists the names of all C files in the current directory whose contentsmention ‘main’.

  2. How do I search directories recursively?
              grep -r 'hello' /home/gigi
    

    searches for ‘hello’ in all filesunder the/home/gigi directory. For more control over which files are searched,usefind, grep, andxargs. For example, the following command searches only C files:

              find /home/gigi -name '*.c' -print0 | xargs -0r grep -H 'hello'
    

    This differs from the command:

              grep -rH 'hello' *.c
    

    which merely looks for ‘hello’ in all files in the currentdirectory whose names end in ‘.c’. Here the-r isprobably unnecessary, as recursion occurs only in the unlikely eventthat one of ‘.c’ files is a directory. The ‘find ...’ command line above is more similar to the command:

              grep -rH --include='*.c' 'hello' /home/gigi
    
  3. What if a pattern has a leading ‘-’?
              grep -e '--cut here--' *
    

    searches for all lines matching ‘--cut here--’. Without ‘-e’,grep would attempt to parse ‘--cut here--’ as a list ofoptions.

  4. Suppose I want to search for a whole word, not a part of a word?
              grep -w 'hello' *
    

    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\>' *
    

    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' *
    

    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 wouldhave matched not only theps output line for cron,but also theps 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 lineexcept the available memory.

  8. Why does grep report “Binary file matches”?

    If grep listed all matching “lines” from a binary file, itwould probably generate output that is not useful, and it might evenmuck up your display. Sognu grep suppresses output fromfiles that appear to be binary files. To forcegnu grepto 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.

  9. Why doesn't ‘grep -lv’ print non-matching file names?

    grep -lv’ lists the names of all files containing one or morelines that do not match. To list the names of all files that contain nomatching lines, use the ‘-L’ or ‘--files-without-match’option.

  10. I can do or with ‘|’, but what aboutand?
              grep 'paul' /etc/motd | grep 'franc,ois'
    

    finds all lines that contain both ‘paul’ and ‘franc,ois’.

  11. How can I search in both standard input and in files?

    Use the special file name ‘-’:

              cat /etc/passwd | grep 'alain' - /etc/motd
    
  12. How to express palindromes in a regular expression?

    It can be done by using back-references;for example,a palindrome of 4 characters can be written with a BRE:

              grep -w -e '\(.\)\(.\).\2\1' file
    

    It matches the word "radar" or "civic".

    Guglielmo Bondioni proposed a single REthat finds all palindromes up to 19 characters longusing 9 subexpressions and 9 back-references:

              grep -E -e '^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\9\8\7\6\5\4\3\2\1$' file
    

    Note this is done by using gnu ERE extensions;it might not be portable to other implementations ofgrep.

  13. Why is this back-reference failing?
              echo 'ba' | grep -E '(a)\1|b\1'
    

    This gives no output, because the first alternate ‘(a)\1’ does not match,as there is no ‘aa’ in the input, so the ‘\1’ in the second alternatehas nothing to refer back to, meaning it will never match anything. (The second alternate in this example can only matchif the first alternate has matched—making the second one superfluous.)

  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 notmatch newlines in the way you might expect. However, if your grep iscompiled with Perl patterns enabled, the Perl ‘s’modifier (which makes. match newlines) can be used:

              printf 'foo\nbar\n' | grep -P '(?s)foo.*?bar'
    

    With the GNU grep option -z (seeFile and Directory Selection), the input is terminated by null bytes. Thus,you can match newlines in the input, but the output will be the wholefile, so this is really only useful to determine if the pattern ispresent:

              printf 'foo\nbar\n' | grep -z -q 'foo[[:space:]]\+bar'
    

    Failing either of those options, you need to transform the inputbefore giving it togrep, or turn to awk,sed,perl, or many other utilities that aredesigned to operate across lines.

  15. What do grep, fgrep, andegrep stand for?

    The name grep comes from the way line editing was done on Unix. For example,ed uses the following syntaxto print a list of matching lines on the screen:

              global/regular expression/print
              g/re/p
    

    fgrep stands for Fixed grep;egrep stands for Extendedgrep.


Next:  ,Previous:  Usage,Up:  Top

5 Reporting bugs

Email bug reports to bug-grep@gnu.org,a mailing list whose web page ishttp://lists.gnu.org/mailman/listinfo/bug-grep. The Savannah bug tracker forgrep is located athttp://savannah.gnu.org/bugs/?group=grep.

5.1 Known Bugs

Large repetition counts in the ‘{n,m}’ construct may causegrep to use lots of memory. In addition, certain otherobscure regular expressions require exponential time andspace, and may cause grep to run out of memory.

Back-references are very slow, and may require exponential time.


Next:  ,Previous:  Reporting Bugs,Up:  Top

6 Copying

GNU grep is licensed under the GNU GPL, which makes itfreesoftware.

The “free” in “free software” refers to liberty, not price. Assome GNU project advocates like to point out, think of “free speech”rather than “free beer”. In short, you have the right (freedom) torun and change grep and distribute it to other people, and—if youwant—charge money for doing either. The important restriction isthat you have to grant your recipients the same rights and impose thesame restrictions.

This general method of licensing software is sometimes calledopen source. The GNU project prefers the term “free software”for reasons outlined athttp://www.gnu.org/philosophy/open-source-misses-the-point.html.

This manual is free documentation in the same sense. Thedocumentation license is included below. The license for the programis available with the source code, or athttp://www.gnu.org/licenses/gpl.html.


Up:  Copying

6.1 GNU Free Documentation License

Version 1.3, 3 November 2008
     Copyright © 2000-2002, 2007-2008, 2010-2011 Free Software
     Foundation, Inc.
     http://fsf.org/
     
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or otherfunctional and useful documentfree in the sense of freedom: toassure 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 wayto get credit for their work, while not being considered responsiblefor modifications made by others.

    This License is a kind of “copyleft”, which means that derivativeworks of the document must themselves be free in the same sense. Itcomplements the GNU General Public License, which is a copyleftlicense designed for free software.

    We have designed this License in order to use it for manuals for freesoftware, because free software needs free documentation: a freeprogram should come with manuals providing the same freedoms that thesoftware does. But this License is not limited to software manuals;it can be used for any textual work, regardless of subject matter orwhether it is published as a printed book. We recommend this Licenseprincipally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, thatcontains a notice placed by the copyright holder saying it can bedistributed under the terms of this License. Such a notice grants aworld-wide, royalty-free license, unlimited in duration, to use thatwork under the conditions stated herein. The “Document”, below,refers to any such manual or work. Any member of the public is alicensee, and is addressed as “you”. You accept the license if youcopy, modify or distribute the work in a way requiring permissionunder copyright law.

    A “Modified Version” of the Document means any work containing theDocument or a portion of it, either copied verbatim, or withmodifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter sectionof the Document that deals exclusively with the relationship of thepublishers or authors of the Document to the Document's overallsubject (or to related matters) and contains nothing that could falldirectly within that overall subject. (Thus, if the Document is inpart a textbook of mathematics, a Secondary Section may not explainany mathematics.) The relationship could be a matter of historicalconnection with the subject or with related matters, or of legal,commercial, philosophical, ethical or political position regardingthem.

    The “Invariant Sections” are certain Secondary Sections whose titlesare designated, as being those of Invariant Sections, in the noticethat says that the Document is released under this License. If asection does not fit the above definition of Secondary then it is notallowed to be designated as Invariant. The Document may contain zeroInvariant Sections. If the Document does not identify any InvariantSections 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 thatthe Document is released under this License. A Front-Cover Text maybe 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 thegeneral public, that is suitable for revising the documentstraightforwardly with generic text editors or (for images composed ofpixels) generic paint programs or (for drawings) some widely availabledrawing editor, and that is suitable for input to text formatters orfor automatic translation to a variety of formats suitable for inputto text formatters. A copy made in an otherwise Transparent fileformat whose markup, or absence of markup, has been arranged to thwartor discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amountof text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plainascii without markup, Texinfo input format, LaTeX inputformat,SGML or XML using a publicly availableDTD, and standard-conforming simpleHTML,PostScript or PDF designed for human modification. Examplesof transparent image formats includePNG, XCF andJPG. Opaque formats include proprietary formats that can beread and edited only by proprietary word processors,SGML orXML for which the DTD and/or processing tools arenot generally available, and the machine-generatedHTML,PostScript or PDF produced by some word processors foroutput 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 materialthis License requires to appear in the title page. For works informats which do not have any title page as such, “Title Page” meansthe 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 copiesof the Document to the public.

    A section “Entitled XYZ” means a named subunit of the Document whosetitle either is precisely XYZ or contains XYZ in parentheses followingtext that translates XYZ in another language. (Here XYZ stands for aspecific 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 asection “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice whichstates that this License applies to the Document. These WarrantyDisclaimers are considered to be included by reference in thisLicense, but only as regards disclaiming warranties: any otherimplication that these Warranty Disclaimers may have is void and hasno effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, eithercommercially or noncommercially, provided that this License, thecopyright notices, and the license notice saying this License appliesto the Document are reproduced in all copies, and that you add no otherconditions whatsoever to those of this License. You may not usetechnical measures to obstruct or control the reading or furthercopying of the copies you make or distribute. However, you may acceptcompensation in exchange for copies. If you distribute a large enoughnumber of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, andyou may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly haveprinted covers) of the Document, numbering more than 100, and theDocument's license notice requires Cover Texts, you must enclose thecopies in covers that carry, clearly and legibly, all these CoverTexts: Front-Cover Texts on the front cover, and Back-Cover Texts onthe back cover. Both covers must also clearly and legibly identifyyou as the publisher of these copies. The front cover must presentthe full title with all words of the title equally prominent andvisible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preservethe title of the Document and satisfy these conditions, can be treatedas verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fitlegibly, you should put the first ones listed (as many as fitreasonably) on the actual cover, and continue the rest onto adjacentpages.

    If you publish or distribute Opaque copies of the Document numberingmore than 100, you must either include a machine-readable Transparentcopy along with each Opaque copy, or state in or with each Opaque copya computer-network location from which the general network-usingpublic has access to download using public-standard network protocolsa 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 ensurethat this Transparent copy will remain thus accessible at the statedlocation until at least one year after the last time you distribute anOpaque copy (directly or through your agents or retailers) of thatedition to the public.

    It is requested, but not required, that you contact the authors of theDocument well before redistributing any large number of copies, to givethem a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document underthe conditions of sections 2 and 3 above, provided that you releasethe Modified Version under precisely this License, with the ModifiedVersion filling the role of the Document, thus licensing distributionand modification of the Modified Version to whoever possesses a copyof it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinctfrom that of the Document, and from those of previous versions(which should, if there were any, be listed in the History sectionof the Document). You may use the same title as a previous versionif the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entitiesresponsible for authorship of the modifications in the ModifiedVersion, together with at least five of the principal authors of theDocument (all of its principal authors, if it has fewer than five),unless they release you from this requirement.
    3. State on the Title page the name of the publisher of theModified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modificationsadjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license noticegiving the public permission to use the Modified Version under theterms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sectionsand required Cover Texts given in the Document's license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and addto it an item stating at least the title, year, new authors, andpublisher of the Modified Version as given on the Title Page. Ifthere is no section Entitled “History” in the Document, create onestating the title, year, authors, and publisher of the Document asgiven on its Title Page, then add an item describing the ModifiedVersion as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document forpublic access to a Transparent copy of the Document, and likewisethe network locations given in the Document for previous versionsit was based on. These may be placed in the “History” section. You may omit a network location for a work that was published atleast four years before the Document itself, or if the originalpublisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preservethe Title of the section, and preserve in the section all thesubstance and tone of each of the contributor acknowledgements and/ordedications given therein.
    12. Preserve all the Invariant Sections of the Document,unaltered in their text and in their titles. Section numbersor the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a sectionmay not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” orto conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections orappendices that qualify as Secondary Sections and contain no materialcopied from the Document, you may at your option designate some or allof these sections as invariant. To do this, add their titles to thelist 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 containsnothing but endorsements of your Modified Version by variousparties—for example, statements of peer review or that the text hasbeen approved by an organization as the authoritative definition of astandard.

    You may add a passage of up to five words as a Front-Cover Text, and apassage of up to 25 words as a Back-Cover Text, to the end of the listof Cover Texts in the Modified Version. Only one passage ofFront-Cover Text and one of Back-Cover Text may be added by (orthrough arrangements made by) any one entity. If the Document alreadyincludes a cover text for the same cover, previously added by you orby 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 explicitpermission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this Licensegive permission to use their names for publicity for or to assert orimply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under thisLicense, under the terms defined in section 4 above for modifiedversions, provided that you include in the combination all of theInvariant Sections of all of the original documents, unmodified, andlist them all as Invariant Sections of your combined work in itslicense notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, andmultiple identical Invariant Sections may be replaced with a singlecopy. If there are multiple Invariant Sections with the same name butdifferent contents, make the title of each such section unique byadding at the end of it, in parentheses, the name of the originalauthor or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list ofInvariant 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 allsections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documentsreleased under this License, and replace the individual copies of thisLicense in the various documents with a single copy that is included inthe collection, provided that you follow the rules of this License forverbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distributeit individually under this License, provided you insert a copy of thisLicense into the extracted document, and follow this License in allother respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separateand independent documents or works, in or on a volume of a storage ordistribution medium, is called an “aggregate” if the copyrightresulting from the compilation is not used to limit the legal rightsof the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does notapply to the other works in the aggregate which are not themselvesderivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to thesecopies of the Document, then if the Document is less than one half ofthe entire aggregate, the Document's Cover Texts may be placed oncovers that bracket the Document within the aggregate, or theelectronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the wholeaggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you maydistribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires specialpermission from their copyright holders, but you may includetranslations of some or all Invariant Sections in addition to theoriginal versions of these Invariant Sections. You may include atranslation of this License, and all the license notices in theDocument, and any Warranty Disclaimers, provided that you also includethe original English version of this License and the original versionsof those notices and disclaimers. In case of a disagreement betweenthe translation and the original version of this License or a noticeor disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”,“Dedications”, or “History”, the requirement (section 4) to Preserveits Title (section 1) will typically require changing the actualtitle.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Documentexcept as expressly provided under this License. Any attemptotherwise to copy, modify, sublicense, or distribute it is void, andwill automatically terminate your rights under this License.

    However, if you cease all violation of this License, then your licensefrom a particular copyright holder is reinstated (a) provisionally,unless and until the copyright holder explicitly and finallyterminates your license, and (b) permanently, if the copyright holderfails to notify you of the violation by some reasonable means prior to60 days after the cessation.

    Moreover, your license from a particular copyright holder isreinstated permanently if the copyright holder notifies you of theviolation by some reasonable means, this is the first time you havereceived notice of violation of this License (for any work) from thatcopyright holder, and you cure the violation prior to 30 days afteryour receipt of the notice.

    Termination of your rights under this section does not terminate thelicenses of parties who have received copies or rights from you underthis License. If your rights have been terminated and not permanentlyreinstated, receipt of a copy of some or all of the same material doesnot give you any rights to use it.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versionsof the GNU Free Documentation License from time to time. Such newversions will be similar in spirit to the present version, but maydiffer in detail to address new problems or concerns. Seehttp://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of thisLicense “or any later version” applies to it, you have the option offollowing the terms and conditions either of that specified version orof any later version that has been published (not as a draft) by theFree Software Foundation. If the Document does not specify a versionnumber of this License, you may choose any version ever published (notas a draft) by the Free Software Foundation. If the Documentspecifies that a proxy can decide which future versions of thisLicense can be used, that proxy's public statement of acceptance of aversion permanently authorizes you to choose that version for theDocument.

  12. RELICENSING

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means anyWorld Wide Web server that publishes copyrightable works and alsoprovides prominent facilities for anybody to edit those works. Apublic wiki that anybody can edit is an example of such a server. A“Massive Multiauthor Collaboration” (or “MMC”) contained in thesite means any set of copyrightable works thus published on the MMCsite.

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0license published by Creative Commons Corporation, a not-for-profitcorporation with a principal place of business in San Francisco,California, as well as future copyleft versions of that licensepublished by that same organization.

    “Incorporate” means to publish or republish a Document, in whole orin part, as part of another Document.

    An MMC is “eligible for relicensing” if it is licensed under thisLicense, and if all works that were first published under this Licensesomewhere other than this MMC, and subsequently incorporated in wholeor 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 siteunder 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 ofthe License in the document and put the following copyright andlicense 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 othercombination of the three, merge those two alternatives to suit thesituation.

If your document contains nontrivial examples of program code, werecommend releasing these examples in parallel under your choice offree software license, such as the GNU General Public License,to permit their use in free software.


Previous:  Copying,Up:  Top

Index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值