您好,登錄后才能下訂單哦!
本篇內容主要講解“Linux基礎命令grep的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Linux基礎命令grep的用法”吧!
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開頭的行
|
2)顯示不包含23的行
|
3)顯示整個字都匹配的行
|
到此,相信大家對“Linux基礎命令grep的用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。