Provided by:
manpages-zh_1.5.1-1_all 
NAME
grep, egrep, fgrep - 列印匹配給定模式的行
` SYNOPSIS
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
yz DESCRIPTION
Grep 搜索以 FILE 命名的檔案輸入
(或者是標準輸入,如果沒有指定檔名,或者給出的檔名是 -
的話),尋找含有與給定的模式 PATTERN 相匹配的內容的行。 預設情況下,
grep 將把含有匹配內容的行列印出來。
另外,也可以使用兩蚥傴媯{式 egrep 和 fgrep 。 Egrep 與 grep -E 相同。
Fgrep 與 grep -F 相同。
OPTIONS
-A NUM, --after-context=NUM
列印出緊隨匹配的行之後的下文 NUM
行。在相鄰的匹配組之間將會列印內容是 -- 的一行。
-a, --text
將一茪G進制檔案視為一荅瞻憒r檔來處理;它與 --binary-files=text
選項等價。
-B NUM, --before-context=NUM
列印出匹配的行之前的上文 NUM
行。在相鄰的匹配組之間將會列印內容是 -- 的一行。
-C NUM, --context=NUM
列印出匹配的行的上下文前後各 NUM
行。在相鄰的匹配組之間將會列印內容是 -- 的一行。
-b, --byte-offset
在輸出的每行前惘P時列印出當前行在輸入檔案中的字節偏移量。
--binary-files=TYPE
如果一蚗仵蛌滌_始幾茼r節表明檔案包含二進制數據,那麼假定檔案是
TYPE 類型的。預設情況下, TYPE 是 binary ,並且 grep
一般會輸出一茪@行的消息說一-
茪G進制檔案匹配,或者如果沒有匹配的話就沒有消息輸出。如果類型
TYPE 是 without-match ,那麼 grep
假定二進制檔案不會匹配;這樣做與 -I 選項等價。如果類型 TYPE 是
text ,那麼 grep 將一茪G進制檔案視為純文字檔來處理;它與 -a
選項等價。 iG grep --binary-files=text
可能會輸出二進制的無用內容。如果輸出設備是一-
茞袟搳A並且終端的驅動將這些輸出中的一些當作命令,可能會帶來惡劣的副作用。
--colour[=WHEN], --color[=WHEN]
在匹配的行周圍以 GREP_COLOR 環境變量中指定的記號來標記。WHEN
可以是 `never', `always', 或是 `auto'。
-c, --count
禁止通常的輸出;作為替代,為每一蚇擗J檔案列印一-
茪t的行的總數。如果使用 -v, --invert-match 選項 (參見下-
),將是不匹配的行的總數。
-D ACTION, --devices=ACTION
如果輸入檔案是一茬]備,FIFO 或是套接字 (socket) ,使用動作
ACTION 來處理它。預設情況下,動作 ACTION 是 read
,意味著設備將視為普通檔案那樣來讀。如果動作 ACTION 是 skip
,將不處理而直接跳過設備。
-d ACTION, --directories=ACTION
如果輸入檔案是一茈媬,使用動作 ACTION
來處理它。預設情況下,動作 ACTION 是 read
,意味著目錄將視為普通檔案那樣來讀。如果動作 ACTION 是 skip
,將不處理而直接跳過目錄。如果動作 ACTION 是 recurse , grep
將遞歸地讀每一目錄下的所有檔案。這樣做和 -r 選項等價。
-E, --extended-regexp
將模式 PATTERN 作為一蚋X展的正則表達式來解釋 (參見下)。
-e PATTERN, --regexp=PATTERN
使用模式 PATTERN 作為模式;在保護以 - 為起始的模式時有用。
-F, --fixed-strings
將模式 PATTERN 視為一茤T定的字符串的列表,用新行 (newlines)
分隔,只n匹配其中之一即可。
-P, --perl-regexp
將模式 PATTERN 作為一 Perl 正則表達式來解釋。
-f FILE, --file=FILE
從檔案 FILE 中獲取模式,每行一荂C空檔案含有0-
蚍狾﹛A因此不匹配任何東西。
-G, --basic-regexp
將模式 PATTERN 作為一荌禰貌漸翰h表達式 (參見下)
來解釋。這是預設C
-H, --with-filename
為每茪t列印檔名。
-h, --no-filename
當搜索多蚗仵蛃氶A禁止在輸出的前悼[上檔名前綴。
--help 輸出一蚋眶u的幫助信息。
-I 處理一茪G進制檔案,但是認為它不包含匹配的內容。這和 --binary-
files=without-match 選項等價。
-i, --ignore-case
忽略模式 PATTERN 和輸入檔案中的大小寫的分別。
-L, --files-without-match
禁止通常的輸出;作為替代,列印出每-
茼b通常情況下不會產生輸出的輸入檔案的名字。對每-
蚗仵蛌滷蓬y在遇到第一茪t的時埭N會停止。
-l, --files-with-matches
禁止通常的輸出;作為替代,列印出每-
茼b通常情況下會產生輸出的輸入檔案的名字。對每-
蚗仵蛌滷蓬y在遇到第一茪t的時埭N會停止。
-m NUM, --max-count=NUM
在找到 NUM 茪t的行之後,不再讀這蚗仵蛂C如果輸入是來自一-
荋雲q檔案的標準輸入,並且已經輸出了 NUM 茪t的行, grep
保証標準輸入被定位於退出時的最後一次匹配的行之後,不管是否指定了-
n輸出緊隨的下文的行。這樣可以使一蚑掍庰{式恢復搜索。當 grep 在
NUM 茪t的行之後停止,它會輸出任何緊隨的下文的行。當使用了 -c
或 --count 選項的時唌A grep 不會輸出比 NUM 更多的行。當指定了 -v
或 --invert-match 選項的時唌A grep 會在輸出 NUM
茪ㄓt的行之後停止。
--mmap 如果可能的話,使用 mmap(2) 系統調用來讀取輸入,而不是預設的
read(2) 系統調用。在一些情況下, --mmap
提供較好的性能。但是,如果一蚇擗J檔案在 grep
正在操作時大小發生變化,或者如果發生了一 I/O 錯誤, --mmap
可能導P不可知的行為 (包括core dumps)。
-n, --line-number
在輸出的每行前悼[上它所在的檔案中它的行號。
-o, --only-matching
只顯示匹配的行中與 PATTERN 相匹配的部分。
--label=LABEL
將實際上來自標準輸入的輸入視為來自輸入檔案 LABEL 。這對於 zgrep
這樣的工具非常有用,例如: gzip -cd foo.gz |grep --label=foo
something
--line-buffering
使用行緩沖,it can be a performance penality.
-q, --quiet, --silent
安靜。不向標準輸出寫任何東西。如果找到任何匹配的內容就立即以狀態-
0 退出,即使檢測到了錯誤。 參見 -s 或 --no-messages 選項。
-R, -r, --recursive
遞歸地讀每一目錄下的所有檔案。這樣做和 -d recurse 選項等價。
--include=PATTERN
僅僅在搜索匹配 PATTERN 的檔案時在目錄中遞歸搜索。
--exclude=PATTERN
在目錄中遞歸搜索,但是跳過匹配 PATTERN 的檔案。
-s, --no-messages
禁止輸出關於檔案不存在或不可讀的錯誤訊息。 對於可移植性需-
n注意:與 GNU grep 不同,傳統的 grep 不遵守 POSIX.2
規範,因為傳統的 grep 缺少一 -q 選項,而它的 -s 選項與 GNU grep
的 -q 選項行為相似。需n可移植到傳統 grep 的 shell
稿本應當避免使用 -q 和 -s 選項,而應當將輸出咿w向到 /dev/null 。
-U, --binary
將檔案視為二進制。預設情況下,在 MS-DOS 和 MS-Windows 系統中,
grep 通過從檔案中讀取頭部的 32kB 內容來判斷它的檔案類型。如果
grep 判斷檔案是一荅瞻憒r檔,它將鴝l檔案內容中的 CR 字符去除
(使得含有 ^ 和 $ 的正則表達式可以正常工作)。指定 -U
將不進行這些工作,而使所有檔案保持不變地讀取並傳遞給匹配機制。如果檔案是一-
茈H CR/LF 換行的純文字檔,這樣作將導P一些正則表達式失敗。這-
蚇龠策b MS-DOS 和 MS-Windows 之外的系統中無效。
-u, --unix-byte-offsets
報告 Unix 榆瑼漲r節偏移量。這荈}關使得 grep
報告字節偏移量時,將檔案作為 Unix 榆瑼滲瞻憒r檔看待,也就是說將
CR 字符去掉。這將產生與在一台 Unix 主機上運行 grep
完全相同的結果。除非同時使用 -b 選項,否則這蚇龠紫L效。這蚇龠策b
MS-DOS 和 MS-Windows 之外的系統中無效。
-V, --version
向標準錯誤輸出列印 grep 的版本號。版本號應當包含在所有的 bug
報告中 (參見下)。
-v, --invert-match
改變匹配的意義,只選擇不匹配的行。
-w, --word-regexp
只選擇含有能組成完整的詞的匹配的行。判斷方法是匹配的子字符串必須是一行的開始,或者是在一-
茪ㄔi能是詞的組成的字符之後。與此相似,它必須是一行的結束,或者是在一-
茪ㄔi能是詞的組成的字符之前。詞的組成字符是字母,數字,還有下劃線。
-x, --line-regexp
只選擇能匹配完整一行的匹配。
-y -i 的同義詞,廢棄不用。
-Z, --null
輸出一茈零字節 (ASCII 碼中的 NUL 字符)
而不是一般情況下輸出在檔名之後的字符。例如, grep -lZ 在每-
蚗犰W之後輸出一茈零字節而不是普通的新行符。這-
蚇龠筐炱o輸出清楚明白,即使檔名的表示中包含特殊字符比如新行符。這-
蚇龠等i以與命令 find -print0, perl -0, sort -z, 和 xargs -0
一起使用,來處理任意的檔名,即使是那些含有新行符的檔名。
hF REGULAR EXPRESSIONS
一茈翰h表達式是一荋yz了一-
茼r符串集合的模式。正則表達式的構造類似於算術表達式,使用各種各樣的操作符來將更小的表達式連在一起。
Grep 能理解兩種不同版本的正則表達式語法:"basic" 和 "extended"。在
GNU grep 中,兩種語法可以實現的弁酮O沒有區別的。在其他實現中,基本
(basic) 正則表達式表達能力n弱一點。下悸煽yz適用於擴展的 (extended)
正則表達式,它與基本正則表達式的區別會在最後做一蚆`結。
基本的構造塊是匹配單-
茼r符的正則表達式。大部分字符,包括所有字母和數字,是匹配它怞菬-
的正則表達式。任何具有特殊含義的元字符可以通過前置一茪炱袟b來引用。(may
be quoted by preceding it with a backslash.)
AF (bracket) 是一茼r符序列,放在 [ 和 ]
當中。它匹配序列中的任何一茼r符;如果序列中的第一茼r符是脫字符 (caret)
^ 那麼它匹配 b 序列中的任何一茼r符。例如,正則表達式 [0123456789]
匹配任何一蚍r。
在方括號表達式之中,一 SF (range) 由兩茼r符組成,中間用一-
茬s字符 (hyphen) 分隔。它匹配在這兩茼r符之間的任何一-
茼r符,使用本地化的序列順序和字符集。(that sorts between the two
characters,inclusive, using the locale's collating sequence and
character set.) 例如,在預設的 C locale中, [a-d] 與 [abcd]
等價。典型的,釵h locale 將字符以字典順序排序,在這些 locale 中, [a-d]
不與 [abcd] 等價;例如它可能與 [aBbCcDd] 等價。-
n獲得傳統的對方括號表達式的解釋,可以設定環境變量 LC_ALL C 來使用
locale C 。
最後,在方括號表達式中有一些預定義的字符類,如下所示。它-
怐漲W字是自說明的,它怓O [:alnum:](字母和數字), [:alpha:](字母),
[:cntrl:](), [:digit:](數字), [:graph:](), [:lower:](小寫字母),
[:print:](可列印字符), [:punct:](), [:space:](空格),
[:upper:](大寫字母), 和 [:xdigit:] 。例如, [[:alnum:]] 意思是
[0-9A-Za-z] ,但是後一種表示方法依賴於 locale C 和ASCII
字符編碼,而前一種是與 locale
和字符集無關的。(注意這些字符類名中的方括號也是符號名稱的一部分,必須包含在用來為序列定界的方括號之中。)
大多數元字符處於序列中時會失去它怐滲S殊意義。為了包含一茼r捧N義
(literal) 的 ] ,需n將它放在序列的最前。與此相似,為了包含一茼r捧N義
(literal) 的 ^ ,需-
n將它放在除了序列最前之外的其他位置。最後,為了包含一茼r捧N義 (literal)
的 - ,需n將它放在序列最後。
句點符 (period) . 匹配任何一茼r符。符號 \w 是 [[:alnum:]] 的同義詞,
\W 是 [^[:alnum]] 的同義詞。
脫字符 (caret) ^ 和美元標記 (dollar) $ 分別是匹配一行的-
熙〝M尾部的空字串的元字符。符號 \< 和 \> 分別是匹配一茧的-
熙〝M尾部的空字串的元字符。符號 \b 匹配一茧邊緣 (edge) 的空字串,符號
\B 匹配 處於一茧的邊緣的空字串。
一茈翰h表達式後悼i以跟隨多種契_操作符之一。
? 先前的項是可選的,最多匹配一次。
* 先前的項可以匹配零次或多次。
+ 先前的項可以匹配一次或多次。
{n} 先前的項將匹配恰好 n 次。
{n,} 先前的項可以匹配 n 或更多次。
{n,m} 先前的項將匹配至少 n 詞,但是不會超過 m 次。
兩茈翰h表達式可以連接到一起;得出的正則表達式可以匹配任何由兩-
茪嬪O匹配連接前的子表達式的子字符串連接而成的字符串。
兩茈翰h表達式可以用中綴操作符 |
聯合到一起,得出的正則表達式可以匹配任何匹配聯合前的任何一-
茪l表達式的字符串。
契_操作符的優先級比連接高,接下來又比選擇的優先級高。一-
荍嗾膋漱l表達式可以用圓括號 (parentheses) 括住來超越這些優先級規則。(to
override these precedence rules.)
反向引用 \n 中, n 是一蚍r,匹配正則表達式中,以第 n
荈磟A號括住的子表達式已匹配的子字符串。
在基本正則表達式中,元字符 ?, +, {, |, (, 和 ) 喪失了它-
怐滲S殊意義;作為替代,使用加反斜槓的 (backslash) 版本 \?, \+, \{, \|,
\(, 和 \) 。
傳統的 egrep 不支持元字符 { ,並且一些 egrep 的實現通過支持 \{
來代替它,因此可移植的稿本應當避免 在 egrep 中使用 { 模式,應當使用 [{]
來匹配一茼r捧N義 (literal) 的 { 。
GNU egrep 通過假設如果 { 處於 an invalid interval specification
的起始,就不是一荅S殊字符,來支持傳統的用法。例如,shell 命令 egrep
'{1' 將會搜索這茖潀r符的字符串 {1
而不是報告在正則表達式中發生了語法錯誤。POSIX.2 允陶o茼甈陛A將其視為一-
蚋X展,但是可移植的稿本應當避免使用它。
q ENVIRONMENT VARIABLES
Grep 的行為受下列環境變量影響。
一 locale LC_foo 是通過按下悸熄陽A LC_ALL, LC_foo, LANG, 檢查這三-
蚗藿疻僆q的取蚑T定的。設置了的第一蚥僆q指定了 locale。例如,如果
LC_ALL 沒有設置,但是 LC_MESSAGES 設置為 pt_BR ,那麼巴西的葡萄牙語
(Brazilian Portuguese) 將用作 LC_MESSAGES locale 的-
C如果沒有設置這其中任何一蚗藿疻僆q,或者沒有安裝所設置的 locale
目錄,或者如果 grep 沒有將國家和語言支持 (national language support
(NLS)) 編譯在內,將預設使用 locale C。
GREP_OPTIONS
這蚥僆q指定了將放在所有顯式指定的選項之前的預設選項。例如,如果
GREP_OPTIONS 是 '--binary-files=without-match
--directories=skip' 的話, grep
將像已經在任何顯式指定的選項之前指定了 --binary-files=without-
match 和 --directories=skip 選項那樣來運作。選項以空白
(whitespace) 分隔。一茪炱袟b (backslash) 使得下一茼r符轉義
(escape),因此可以用來指定一荍t有空白或者反斜槓的選項。
GREP_COLOR
指定用來高亮顯示的標記。
LC_ALL, LC_COLLATE, LANG
這些變量指定了 locale LC_COLLATE ,決定了解釋類似 [a-z] 的-
S圍表達式時的序列順序 (collating sequence) 。
LC_ALL, LC_CTYPE, LANG
這些選項指定了 locale LC_CTYPE ,決定了字符的類型,例如,-
些字符是空白 (whitespace) 。
LC_ALL, LC_MESSAGES, LANG
這些選項指定了 locale LC_MESSAGES ,決定了 grep
的消息使用的語言。預設的 locale C 使用美國^語的消息。
POSIXLY_CORRECT
如果設置了的話, grep 將像 POSIX.2 n求的那樣來運作;否則, grep
將像其他 GNU 程式一樣來運作。POSIX.2
n求檔名之後的選項必須視為檔名;預設情況下,這些選項被交換到操作數列表的前-
情A被當作選項來處理。同時, POSIX.2
n求不可識別的選項在診斷消息中表示為 "illegal",但是既然它-
怢S有真正觸犯法律,因此預設情況下它怞b診斷 (diagnose)
消息中表示為 "invalid"。 POSIXLY_CORRECT 同時禁止了下探yz的
_N_GNU_nonoption_argv_flags_。
_N_GNU_nonoption_argv_flags_
(這裏 N 是 grep's 數字形式的進程ID。) 如果這蚗藿疻僆q的熔 i
茼r符是 1 ,那麼不將 grep 的第 i 蚞犑@數視為一-
蚇龠窗A即使它看上去像。shell 可以將這蚥僆q設置在它運行的每-
茤R令的環境中,指定-
蚞犑@數是檔名通配符擴展的結果,因此不應當被視為選項。這-
茼甈陞u有在使用 GNU C 庫時有效,並且只有在 POSIXLY_CORRECT
沒有設置的時唌C
E DIAGNOSTICS
一般地,如果找到了選擇的行,退出時狀態-
0,否則為1。但是如果發生錯誤,退出時狀態O2,除非指定了 -q 或
--quiet 或 --silent 選項,並且找到了選擇的行。
BUGS
bug 報告的電子郵件地址是 bug-gnu-utils@gnu.org。 一定-
n在"Subject:"中帶有 "grep" 這茧。
在 {n,m} 結構中契_次數過多會導P grep
使用大量記憶體。另外,一些過分晦澀的正則表達式需-
n指數級的時間和空間,可能會導P grep 耗盡所有記憶體。
向後引用 (backreferences) 非常慢,可能需n指數級的時間。
[]
KAv <bbbush@163.com>
[]
2003.11.03
mlinuxan:
http://cmpp.linuxforum.net
GNU Project GREP(1)