Linux基礎命令—顯示文字grep

一生有你llx發表於2018-12-27

grep

      按照指定的模式,在檔案中搜尋匹配的行,將結果顯示在標準輸出。另外還有兩個指令egrep相當於grep –E,fgrep相當於grep -F。如果沒有給出檔名,那麼從標準輸入讀取。

     此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

 

1、語法

     grep [選項]  PATTERN files

     grep [OPTIONS]  [-e PATTERN | -f FILE]  [FILE…]

 

2、選項列表

選項

說明

-V | –version

顯示命令版本資訊

–help

顯示幫助文件

匹配選擇

 

-E | –extended-regexp

使用擴充套件規則表示式解釋匹配模式

-F | –fixed-strings

將匹配模式看做固定字串

-G | –basic-regexp

使用基本規則表示式解釋匹配模式

-P | –perl-regexp

使用perl表示式解釋匹配模式

檔案和目錄選擇控制

 

-a | –text

忽略二進位制資料

–binary-files=TYPE

如果檔案的前幾個位元組表示該檔案包含二進位制資料,則假定該檔案型別是TYPE。預設情況下,TYPE為二進位制,grep通常輸出一行訊息表示二進位制檔案匹配,如果沒有匹配則不輸出訊息。如果型別不匹配,grep假定二進位制檔案不匹配;這相當於-i選項。如果TYPE是文字,grep會像處理文字一樣處理二進位制檔案;這相當於-a選項。警告:“grep-binary-files=text”可能會輸出二進位制垃圾,如果輸出是終端,並且終端驅動程式將其中的一些解釋為命令,則會產生嚴重的副作用。

-D action | –devices=ACTION

如果輸入檔案是一個裝置檔案,那麼用指定的action處理。read,像普通檔案一樣讀取裝置,skip,忽略裝置

-d action | –directories=ACTION

如果查詢的是目錄檔案,那麼使用指定的操作處理。read,像普通檔案一樣讀取目錄;skip,忽略目錄;recursive,遞迴當時讀取子目錄下檔案。

–exclude=per

忽略檔名匹配per的檔案       

–exclude-from=FILE

跳過其基本名稱與從FILE中讀取的任何檔名全域性匹配的檔案。

–exclude-dir=DIR

從遞迴搜尋中排除匹配模式DIR的目錄

-I

處理二進位制檔案,就像它不包含匹配的資料一樣;等價於“–binary-files=without-match”

–include=GLOB

只搜尋其基本名稱與GLOB匹配的檔案

-R | -r | –recursive

遞迴方式讀取目錄下所有檔案

行數控制

 

-A num | –after-context=NUM

顯示匹配行以及之後指定的行數

-B num | –before-context=NUM

顯示匹配行以及之前指定的行數

-C num | -NUM | –context=NUM

顯示匹配行以及之前和之後的指定行數

輸出行控制

 

-b | –byte-offset

在顯示匹配的行之前,列印該行第一個字元的偏移位置

-H | –with-filename

為每個匹配的行顯示檔名,如果有多個檔案的話,這是預設操作

-h | –no-filename

顯示匹配的行,但是不顯示檔名。如果搜尋一個檔案時,這是預設操作

-n | –line-number

顯示匹配的行之前,顯示行號

-T | –initial-tab

確保實際行內容的第一個字元位於製表符停止上,使製表符的對齊看起來正常。

-u | –unix-byte-offsets

報告Unix樣式的位元組偏移量。此開關使grep報告位元組偏移量,就像檔案是Unix樣式的文字檔案一樣

-Z | –null

輸出一個零位元組(ASCII null字元),而不是通常跟隨檔名的字元。例如,“grep –lz”在每個檔名之後輸出一個零位元組,而不是通常的換行符。

輸出控制

 

-c | –count

統計符合匹配的行數

–color[=WHEN] |  –colour[=WHEN]

用轉義序列包圍匹配(非空)字串、匹配行、上下文行、檔名、行號、位元組偏移量和分隔符(用於欄位和上下文行組),以便在終端上顯示它們的顏色。顏色由環境變數grep_colors定義。仍然支援不推薦的環境變數grep_color,但它的設定沒有優先順序。WHEN的有效值是never,always,auto。

-L | –files-without-match

禁止正常輸出;而是列印通常不會輸出的每個輸入檔案的名稱。掃描將在第一次匹配的時候停止。

-l

顯示內容符合指定匹配模式的檔名

-m num  |  –max-count=NUM

在匹配num行之後,停止搜尋

-o | –only-matching

只顯示匹配行的匹配字元

-q | –quite

靜默模式,搜尋完成之後返回0

-s | –no-messages

不顯示檔案不存在和檔案不可讀的錯誤資訊

模式控制

 

-e parttern  |  –regexp=PATTERN

設定匹配模式

-f file  | –file=FILE

將給定的檔案內容作為匹配模式

-i  |  –ignore-case

忽略大小寫

-v | –invert-match

顯示不符合匹配模式的行

-w | –word-regexp

顯示整個字都匹配的行

-x | –line-regexp

顯示整行都匹配的行

其他選項

 

–line-buffered

對輸出使用行緩衝。這會導致效能損失。

–mmap

如果可能,使用mmap(2)系統呼叫來讀取輸入,而不是預設的read(2)系統呼叫。在某些情況下,mmap會產生更好的效能。但是,-mmap可能導致未定義的行為(包括核心轉儲),如果一個輸入檔案在grep執行時收縮,或者如果發生I/O錯誤。

-U | –binary

將檔案視為二進位制檔案。

-z | –null-data

將輸入視為一組行,每一行以零位元組(ASCII NUL字元)結尾,而不是換行符。

 

3、環境變數

     grep的行為受到以下環境變數的影響。

     GREP_OPTIONS,此變數指定放置在任何顯式選項前面的預設選項。選項規範由空格分隔。反斜槓轉義下一個字元,因此它可以指定包含空格或反斜槓的選項。例如,如果GREP_OPTIONS是’–binary-files=without-match –directories=skip’,那麼grep執行的時候就假設已經有了這兩個選項。

     GREP_COLOR,此變數指定用於突出顯示匹配(非空)文字的顏色。

     GREP_COLORS,指定用於突出顯示輸出的各個部分的顏色和其他屬性。它的值是一個以冒號分隔的功能列表,預設為ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36,省略了rv和ne布林功能(即false)。支援的功能如下所示。

          sl=,用於整個選定行的SGR子字串(即-v命令列選項省略時的匹配行,或指定-v時不匹配的行)。但是,如果指定了布林rv功能和-v命令列選項,則它將應用於上下文匹配行。預設值為空(即終端的預設顏色對)。

          cx=,用於整個上下文行的SGR子字串(即省略-v命令列選項時的非匹配行,或指定-v時的匹配行)。但是,如果指定了布林RV功能和-v命令列選項,則它將適用於選定的非匹配行。預設值為空(即終端的預設顏色對)。

          rv,當指定-v命令列選項時,逆轉(掉期)“sl=”和“cx=”功能的布林值。預設值為false(即省略了功能)。

          mt=01;31,用於匹配任何行中的非空文字的sgr子字串。(這僅在省略-v命令列選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文字前景。

          ms=01;31,用於匹配選定行中的非空文字的sgr子字串。(這僅在省略-v命令列選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文字前景。

          mc=01;31,用於匹配上下文行中的非空文字的sgr子字串。(這僅在省略-v命令列選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文字前景。

          fn=35,用於任何內容行字首的檔名的SGR子字串。預設值是終端預設背景上的洋紅色文字前景。

          ln=32,任何內容行字首的行號的SGR子字串。預設值是終端預設背景上的綠色文字前景。

          bn=32,用於任何內容行字首的位元組偏移的SGR子字串。預設值是終端預設背景上的綠色文字前景。

          se=36,當指定了非零上下文(–),SGR子字串用於在選定的行欄位(:)、上下文行欄位之間(-)和相鄰行組之間插入分隔符。預設值是終端預設背景上的青色文字前景。

          ne,布林值,該值防止在每次彩色項結束時使用擦除入行(EL)對右(33[K]清除到行尾的值。這是在不支援EL的終端上需要的。對於沒有應用Back_COLOR_ERASE(BCE)布林終止功能的終端、所選擇的高亮顏色不影響背景、或者當EL太慢或導致過多閃爍時,它在其他情況下是有用的。預設值為false(即省略功能)

     LC_ALL, LC_COLLATE, LANG,這些變數指定LC_COLLATE類別的區域設定,該類別確定用於解釋範圍表示式(如[a-z])的排序序列。

     LC_ALL, LC_CTYPE, LANG,這些變數指定LC_CTYPE類別的區域設定,它決定字元的型別,例如,哪些字元是空格。

     LC_ALL, LC_MESSAGES, LANG,這些變數指定LC_MESSAGES類別的區域設定,它確定grep用於訊息的語言。預設的C語言環境使用美式英語訊息。

     POSIXLY_CORRECT,如果設定,grep的行為與POSIX.2所要求的一樣;否則,grep的行為更像其他GNU程式。POSIX.2要求必須將檔名後面的選項視為檔名;預設情況下,這些選項被排到運算元列表的前面,並被視為選項。此外,POSIX.2還要求將未被承認的選項診斷為“非法”,但由於它們並不真正違反法律,預設情況是將它們診斷為“無效”。POSIXLY_RIDER還禁用_N_GNU_NOOPTION_ARGV_LANGS_,如下所述。

     _N_GNU_nonoption_argv_flags_,(這裡N是grep的數字程式ID。)如果此環境變數值的ith字元為1,則不要將grep的ith運算元視為選項,即使它似乎是選項之一。shell可以為其執行的每個命令在環境中放置此變數,指定哪些運算元是檔名萬用字元展開的結果,因此不應被視為選項。此行為僅在GNU C庫中可用,且僅在未設定POSIXLY_RIDER時才可用。

 

4、退出碼

     通常,如果找到選定的行,則退出狀態為0,否則為1。但是,如果發生錯誤,退出狀態為2,除非使用-q、–quite、–slient選項,並找到選定的行。但是,請注意,對於grep、CMP和diff等程式,POSIX只要求在出現錯誤時的退出狀態大於1;因此,出於可移植性的考慮,建議使用對此一般條件進行測試的邏輯,而不是與2嚴格相等的邏輯。

 

5、例項

     1)顯示檔案中以2開頭的行

[root@localhost weijie]# cat 2.c

123

23

212

[root@localhost weijie]# grep ^2 2.c         //顯示以2開頭的行

23

212

     2)顯示不包含23的行 

[root@localhost weijie]# grep -v 23 2.c

212

     3)顯示整個字都匹配的行 

[root@localhost weijie]# grep -w 23 2.c

23

相關文章