shell grep命令

grep 命令

NAME
       grep, egrep, fgrep - 打印匹配給定模式的行

總覽 SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]

描述 DESCRIPTION
       Grep   搜索以  FILE  命名的文件輸入  (或者是標準輸入,若是沒有指定文件名,或者給出的文件名是  -
       的話),尋找含有與給定的模式      PATTERN       相匹配的內容的行。       默認狀況下,       grep
       將把含有匹配內容的行打印出來。

       另外,也可使用兩個變種程序 egrep 和 fgrep 。 Egrep 與 grep -E 相同。 Fgrep 與 grep -F 相同。

選項 OPTIONS
       -A NUM, --after-context=NUM
              打印出緊隨匹配的行以後的下文 NUM 行。在相鄰的匹配組之間將會打印內容是 -- 的一行。

       -a, --text
              將一個二進制文件視爲一個文本文件來處理;它與 --binary-files=text 選項等價。

       -B NUM, --before-context=NUM
              打印出匹配的行以前的上文 NUM 行。在相鄰的匹配組之間將會打印內容是 -- 的一行。

       -C NUM, --context=NUM
              打印出匹配的行的上下文先後各 NUM 行。在相鄰的匹配組之間將會打印內容是 -- 的一行。

       -b, --byte-offset
              在輸出的每行前面同時打印出當前行在輸入文件中的字節偏移量。

       --binary-files=TYPE
              若是一個文件的起始幾個字節代表文件包含二進制數據,那麼假定文件是                    TYPE
              類型的。默認狀況下,         TYPE         是         binary         ,而且          grep
              通常會輸出一個一行的消息說一個二進制文件匹配,或者若是沒有匹配的話就沒有消息輸出。若是類型
              TYPE 是 without-match ,那麼 grep 假定二進制文件不會匹配;這樣作與 -I 選項等價。若是類型
              TYPE  是  text ,那麼 grep 將一個二進制文件視爲文本文件來處理;它與 -a 選項等價。 警告:
              grep                                                                 --binary-files=text
              可能會輸出二進制的無用內容。若是輸出設備是一個終端,而且終端的驅動將這些輸出中的一些看成命
令,可能會帶來惡劣的反作用。

       --colour[=WHEN], --color[=WHEN]
              在匹配的行周圍以 GREP_COLOR 環境變量中指定的記號來標記。WHEN 能夠是  `never',  `always',
              或是 `auto'。

       -c, --count
              禁止一般的輸出;做爲替代,爲每個輸入文件打印一個匹配的行的總數。若是使用 -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 做爲一個擴展的正則表達式來解釋 (參見下面)。

       -e PATTERN, --regexp=PATTERN
              使用模式 PATTERN 做爲模式;在保護以 - 爲起始的模式時有用。

       -F, --fixed-strings
              將模式           PATTERN          視爲一個固定的字符串的列表,用新行          (newlines)
              分隔,只要匹配其中之一便可。

       -P, --perl-regexp
              將模式 PATTERN 做爲一個 Perl 正則表達式來解釋。

       -f FILE, --file=FILE
              從文件 FILE 中獲取模式,每行一個。空文件含有0個模式,所以不匹配任何東西。

       -G, --basic-regexp
              將模式 PATTERN 做爲一個基本的正則表達式 (參見下面) 來解釋。這是默認值。

       -H, --with-filename
              爲每一個匹配打印文件名。

       -h, --no-filename
              當搜索多個文件時,禁止在輸出的前面加上文件名前綴。

       --help 輸出一個簡短的幫助信息。

       -I     處理一個二進制文件,可是認爲它不包含匹配的內容。這和        --binary-files=without-match
              選項等價。

       -i, --ignore-case
              忽略模式 PATTERN 和輸入文件中的大小寫的分別。

       -L, --files-without-match
              禁止一般的輸出;做爲替代,打印出每一個在一般狀況下不會產生輸出的輸入文件的名字。對每一個文件的
掃描在遇到第一個匹配的時候就會中止。

       -l, --files-with-matches
              禁止一般的輸出;做爲替代,打印出每一個在一般狀況下會產生輸出的輸入文件的名字。對每一個文件的掃
描在遇到第一個匹配的時候就會中止。

       -m NUM, --max-count=NUM
              在找到                                                                               NUM
              個匹配的行以後,再也不讀這個文件。若是輸入是來自一個普通文件的標準輸入,而且已經輸出了 NUM
              個匹配的行,                                                                        grep
              保證標準輸入被定位於退出時的最後一次匹配的行以後,不論是否指定了要輸出緊隨的下文的行。這樣
可使一個調用程序恢復搜索。當
              grep  在  NUM  個匹配的行以後中止,它會輸出任何緊隨的下文的行。當使用了  -c  或  --count
              選項的時候, grep 不會輸出比 NUM 更多的行。當指定了 -v  或  --invert-match  選項的時候,
              grep 會在輸出 NUM 個不匹配的行以後中止。

       --mmap 若是可能的話,使用        mmap(2)        系統調用來讀取輸入,而不是默認的        read(2)
              系統調用。在一些狀況下,    --mmap     提供較好的性能。可是,若是一個輸入文件在     grep
              正在操做時大小發生變化,或者若是發生了一個   I/O   錯誤,   --mmap  可能致使不可知的行爲
              (包括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
              禁止輸出關於文件不存在或不可讀的錯誤信息。     對於可移植性須要注意:與     GNU     grep
              不一樣,傳統的  grep  不遵照  POSIX.2  規範,由於傳統的  grep  缺乏一個 -q 選項,而它的 -s
              選項與 GNU grep 的 -q 選項行爲類似。須要可移植到傳統 grep 的 shell  腳本應當避免使用  -q
              和 -s 選項,而應當將輸出重定向到 /dev/null 。

       -U, --binary
              將文件視爲二進制。默認狀況下,在      MS-DOS     和     MS-Windows     系統中,     grep
              經過從文件中讀取頭部的          32kB          內容來判斷它的文件類型。若是          grep
              判斷文件是一個文本文件,它將原始文件內容中的    CR    字符去除    (使得含有   ^   和   $
              的正則表達式能夠正常工做)。指定                                                       -U
              將不進行這些工做,而使全部文件保持不變地讀取並傳遞給匹配機制。若是文件是一個以     CR/LF
              換行的文本文件,這樣做將致使一些正則表達式失敗。這個選項在    MS-DOS    和    MS-Windows
              以外的系統中無效。

       -u, --unix-byte-offsets
              報告   Unix   風格的字節偏移量。這個開關使得   grep   報告字節偏移量時,將文件做爲  Unix
              風格的文本文件看待,也就是說將  CR  字符去掉。這將產生與在一臺  Unix   主機上運行   grep
              徹底相同的結果。除非同時使用  -b 選項,不然這個選項無效。這個選項在 MS-DOS 和 MS-Windows
              以外的系統中無效。

       -V, --version
              向標準錯誤輸出打印 grep 的版本號。版本號應當包含在全部的 bug 報告中 (參見下面)。

       -v, --invert-match
              改變匹配的意義,只選擇不匹配的行。

       -w, --word-regexp
              只選擇含有能組成完整的詞的匹配的行。判斷方法是匹配的子字符串必須是一行的開始,或者是在一個
不多是詞的組成的字符以後。與此類似,它必須是一行的結束,或者是在一個不多是詞的組成的字符以前。詞的組
成字符是字母,數字,還有下劃線。

       -x, --line-regexp
              只選擇能匹配完整一行的匹配。

       -y     -i 的同義詞,廢棄不用。

       -Z, --null
              輸出一個全零字節  (ASCII 碼中的 NUL 字符) 而不是通常狀況下輸出在文件名以後的字符。例如,
              grep                                                                                 -lZ
              在每一個文件名以後輸出一個全零字節而不是普通的新行符。這個選項使得輸出清楚明白,即便文件名的
表示中包含特殊字符好比新行符。這個選項能夠與命令
              find      -print0,      perl      -0,       sort       -z,       和       xargs       -0
              一塊兒使用,來處理任意的文件名,即便是那些含有新行符的文件名。

正則表達式 REGULAR EXPRESSIONS
       一個正則表達式是一個描述了一個字符串集合的模式。正則表達式的構造相似於算術表達式,使用各類各樣的操做符來將更小的表達式連在一塊兒。

       Grep      能理解兩種不一樣版本的正則表達式語法:「basic」      和      「extended」。在      GNU grep
       中,兩種語法能夠實現的功能是沒有區別的。在其餘實現中,基本                              (basic)
       正則表達式表達能力要弱一點。下面的描述適用於擴展的                                   (extended)
       正則表達式,它與基本正則表達式的區別會在最後作一個總結。

       基本的構造塊是匹配單個字符的正則表達式。大部分字符,包括全部字母和數字,是匹配它們自身的正則表達式。任何具備特殊含義的元字符能夠經過前置一個反斜槓來引用。(may
       be quoted by preceding it with a backslash.)

       方括號表達式          (bracket)          是一個字符序列,放在          [          和          ]
       當中。它匹配序列中的任何一個字符;若是序列中的第一個字符是脫字符   (caret)  ^  那麼它匹配  不在
       序列中的任何一個字符。例如,正則表達式 [0123456789] 匹配任何一個數字。

       在方括號表達式之中,一個   範圍表達式   (range)    由兩個字符組成,中間用一個連字符    (hyphen)
       分隔。它匹配在這兩個字符之間的任何一個字符,使用本地化的序列順序和字符集。(that  sorts  between
       the two characters,inclusive,  using  the  locale's  collating  sequence  and  character  set.)
       例如,在默認的     C     locale中,     [a-d]     與     [abcd]    等價。典型的,許多    locale
       將字符以字典順序排序,在這些  locale  中,  [a-d]  不與  [abcd]  等價;例如它可能與   [aBbCcDd]
       等價。要得到傳統的對方括號表達式的解釋,能夠設定環境變量 LC_ALL 值爲 C 來使用 locale C 。

       最後,在方括號表達式中有一些預約義的字符類,以下所示。它們的名字是自說明的,它們是
       [:alnum:](字母和數字),    [:alpha:](字母),    [:cntrl:](),    [:digit:](數字),     [:graph:](),
       [:lower:](小寫字母),  [:print:](可打印字符), [:punct:](), [:space:](空格), [:upper:](大寫字母),
       和 [:xdigit:] 。例如,  [[:alnum:]]  意思是  [0-9A-Za-z]  ,可是後一種表示方法依賴於  locale  C
       和ASCII                              字符編碼,而前一種是與                              locale
       和字符集無關的。(注意這些字符類名中的方括號也是符號名稱的一部分,必須包含在用來爲序列定界的方括號
之中。)

       大多數元字符處於序列中時會失去它們的特殊意義。爲了包含一個字面意義      (literal)      的     ]
       ,須要將它放在序列的最前。與此類似,爲了包含一個字面意義         (literal)         的         ^
       ,須要將它放在除了序列最前以外的其餘位置。最後,爲了包含一個字面意義     (literal)     的     -
       ,須要將它放在序列最後。

       句點符 (period) .  匹配任何一個字符。符號  \w  是  [[:alnum:]]  的同義詞,  \W  是  [^[:alnum]]
       的同義詞。

       脫字符  (caret)  ^ 和美圓標記 (dollar) $ 分別是匹配一行的首部和尾部的空字串的元字符。符號 \< 和
       \> 分別是匹配一個詞的首部和尾部的空字串的元字符。符號 \b 匹配一個詞邊緣  (edge)  的空字串,符號
       \B 匹配 不 處於一個詞的邊緣的空字串。

       一個正則表達式後面能夠跟隨多種重複操做符之一。
       ?      先前的項是可選的,最多匹配一次。
       *      先前的項能夠匹配零次或屢次。
       +      先前的項能夠匹配一次或屢次。
       {n}    先前的項將匹配剛好 n 次。
       {n,}   先前的項能夠匹配 n 或更屢次。
       {n,m}  先前的項將匹配至少 n 詞,可是不會超過 m 次。

       兩個正則表達式能夠鏈接到一塊兒;得出的正則表達式能夠匹配任何由兩個分別匹配鏈接前的子表達式的子字符串鏈接而成的字符串。

       兩個正則表達式能夠用中綴操做符                                                                |
       聯合到一塊兒,得出的正則表達式能夠匹配任何匹配聯合前的任何一個子表達式的字符串。

       重複操做符的優先級比鏈接高,接下來又比選擇的優先級高。一個完整的子表達式能夠用圓括號 (parenthe‐
       ses) 括住來超越這些優先級規則。(to override these precedence rules.)

       反向引用         \n         中,         n         是一個數字,匹配正則表達式中,以第         n
       個圓括號括住的子表達式已匹配的子字符串。

       在基本正則表達式中,元字符  ?,  +, {, |, (, 和 ) 喪失了它們的特殊意義;做爲替代,使用加反斜槓的
       (backslash) 版本 \?, \+, \{, \|, \(, 和 \) 。

       傳統的     egrep     不支持元字符      {      ,而且一些      egrep      的實現經過支持      \{
       來代替它,所以可移植的腳本應當避免  在  egrep  中使用  {  模式,應當使用 [{] 來匹配一個字面意義
       (literal) 的 { 。

       GNU     egrep     經過假設若是     {     處於     an     invalid     interval     specification
       的起始,就不是一個特殊字符,來支持傳統的用法。例如,shell         命令        egrep        '{1'
       將會搜索這個兩字符的字符串          {1          而不是報告在正則表達式中發生了語法錯誤。POSIX.2
       容許這個行爲,將其視爲一個擴展,可是可移植的腳本應當避免使用它。

環境變量 ENVIRONMENT VARIABLES
       Grep 的行爲受下列環境變量影響。

       一個       locale       LC_foo       是經過按下面的順序,       LC_ALL,      LC_foo,      LANG,
       檢查這三個環境變量的取值而肯定的。設置了的第一個變量指定了      locale。例如,若是       LC_ALL
       沒有設置,可是  LC_MESSAGES  設置爲  pt_BR  ,那麼巴西的葡萄牙語  (Brazilian Portuguese) 將用做
       LC_MESSAGES   locale   的值。若是沒有設置這其中任何一個環境變量,或者沒有安裝所設置的    locale
       目錄,或者若是 grep 沒有將國家和語言支持 (national language support (NLS)) 編譯在內,將默認使用
       locale C。

       GREP_OPTIONS
              這個變量指定了將放在全部顯式指定的選項以前的默認選項。例如,若是     GREP_OPTIONS     是
              '--binary-files=without-match          --directories=skip'          的話,          grep
              將像已經在任何顯式指定的選項以前指定了   --binary-files=without-match   和    --directo‐
              ries=skip    選項那樣來運做。選項以空白    (whitespace)   分隔。一個反斜槓   (backslash)
              使得下一個字符轉義 (escape),所以能夠用來指定一個含有空白或者反斜槓的選項。

       GREP_COLOR
              指定用來高亮顯示的標記。

       LC_ALL, LC_COLLATE, LANG
              這些變量指定了 locale LC_COLLATE ,決定了解釋相似 [a-z]  的範圍表達式時的序列順序  (col‐
              lating 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   要求的那樣來運做;不然,   grep   將像其餘   GNU
              程序同樣來運做。POSIX.2
              要求文件名以後的選項必須視爲文件名;默認狀況下,這些選項被交換到操做數列表的前面,被看成選
項來處理。同時,
              POSIX.2                    要求不可識別的選項在診斷消息中表示爲                   「ille‐
              gal」,可是既然它們沒有真正觸犯法律,所以默認狀況下它們在診斷   (diagnose)   消息中表示爲
              「invalid」。 POSIXLY_CORRECT 同時禁止了下面描述的 _N_GNU_nonoption_argv_flags_。

       _N_GNU_nonoption_argv_flags_
              (這裏  N  是 grep's 數字形式的進程ID。) 若是這個環境變量的值的第 i 個字符是 1 ,那麼不將
              grep            的第            i            個操做數視爲一個選項,即便它看上去像。shell
              能夠將這個變量設置在它運行的每一個命令的環境中,指定哪一個操做數是文件名通配符擴展的結果,所以
不該當被視爲選項。這個行爲只有在使用
              GNU C 庫時有效,而且只有在 POSIXLY_CORRECT 沒有設置的時候。

診斷 DIAGNOSTICS
       通常地,若是找到了選擇的行,退出時狀態值爲0,不然爲1。可是若是發生錯誤,退出時狀態值是2,除非指定

       -q 或 --quiet 或 --silent 選項,而且找到了選擇的行。

BUGS
       bug 報告的電子郵件地址是 bug-gnu-utils@gnu.org。 必定要在「Subject:」中帶有 「grep」 這個詞。

       在                    {n,m}                    結構中重複次數過多會致使                    grep
       使用大量內存。另外,一些過度晦澀的正則表達式須要指數級的時間和空間,可能會致使             grep
       耗盡全部內存。

       向後引用 (backreferences) 很是慢,可能須要指數級的時間。


git

相關文章
相關標籤/搜索