grep 命令查詢檔案中的文字字串

2021-06-25 20:23:28 字數 3046 閱讀 4012

grep 命令用於搜尋由 pattern 引數指定的模式,並將每個匹配的行寫入標準輸出中。這些模式是具有限定的正規表示式,它們使用 ed 或 egrep 命令樣式。grep 命令使用壓縮的不確定演算法。 

如果在 file 引數中指定了多個名稱,grep 命令將顯示包含匹配行的檔案的名稱。對 shell 有特殊含義的字元 ($, *, [, |, ^, (, ), \ ) 出現在 pattern 引數中時必須帶雙引號。如果 pattern 引數不是簡單字串,通常必須用單引號將整個模式括起來。在諸如 [a-z] 之類的表示式中,-(減號)cml 可根據當前正在整理的序列來指定乙個範圍。整理順序可以定義等價的類以供在字元範圍中使用。如果未指定任何檔案,grep 會假定為標準輸入。 

注: 請勿對特殊檔案執行 grep 命令,這樣做可能產生不可預計的結果。 

輸入行不應包含空字元。 

輸入檔案應該以換行符結束。 

換行符不會與正規表示式匹配。 

雖然一些標誌可以同時被指定,但其中的某些標誌會覆蓋其他標誌。例如,-l 選項將優先於所有其他標誌。另外,如果您同時指定了 -e 和 -f 標誌,則後指定的那個會有優先權。 

標誌 -b 在每行之前新增找到該行時所在的塊編號。使用這個標誌有助於通過上下文來找到磁碟塊號碼。-b 標誌不能用於來自標準輸入和管道的輸入。 

-c 僅顯示匹配行的計數。 

-e 將每個指定模式視作擴充套件的正規表示式(ere)。ere 的空值將匹配所有的行。 

注:帶有 -e 標誌的 grep 命令等價於 egrep 命令,只不過它們的錯誤和使用資訊不同以及 -s 標誌的作用不同。 

-e patternlist 指定乙個或多個搜尋模式。其作用相當於乙個簡單模式,但在模式以 -(減號)開始的情況下,這將非常有用。模式之間應該用換行符分隔。連續使用兩個換行符或者在引號後加上換行符 ("\n) 可以指定空模式。除非同時指定了 -e 或 -f 標誌,否則每個模式都將被視作基本正規表示式(bre)。grep 可接受多個 -e 和 -f 標誌。在匹配行時,所有指定的模式都將被使用,但評估的順序沒有指定。 

-f 將每個指定的模式視作字串而不是正規表示式。空字串可匹配所有的行。 

注: 帶有 -f 標誌的 grep 命令等價於 fgrep 命令,只不過它們的錯誤和使用資訊不同以及 -s 標誌具有不同的作用。 

-f patternfile 指定包含搜尋模式的檔案。模式之間應該用換行符加以分隔,空行將被認為是空模式。每種模式都將被視作基本的正規表示式(bre),除非同時指定了 -e 或 -f 標誌。 

-h 禁止在匹配行後附加包含此行的檔案的名稱。當指定多個檔案時,將禁止檔名。 

-h 如果指定了 -r 或 -r 選項並且在命令列上指定了引用檔案型別目錄的符號鏈結,則 grep 將搜尋符號鏈結所引用的目錄檔案以及檔案層次結構中在它以下的所有檔案。 

-i 在進行比較時忽略字母的大小寫。 

-l 僅列出(一次)包含匹配行的檔案的名稱。檔名之間用換行符加以分隔。如果搜尋到標準輸入,將返回(標準輸入)的路徑名。-l 標誌同 -c 和 -n 標誌的任意組合一起使用時,其作用類似於僅使用了 -l 標誌。 

-l 如果指定了 -r 或 -r 選項,並且引用檔案型別目錄的符號鏈結在命令列上指定或在檔案層次結構轉移過程中遇到,則 grep 將搜尋符號鏈結所引用的目錄檔案以及檔案層次結構中在它以下的所有檔案。如果同時指定了 -h 和 -l,則命令列上最近指定的選項將生效。 

-n 在每一行之前放置檔案中相關的行號。每個檔案的起始行號為 1,在處理每個檔案時,行計數器都將被復位。 

-p[ separator] 顯示包含匹配行的整個段落。段落之間將按照 separator 引數指定的段落分隔符加以分隔,這些分隔符是與搜尋模式有著相同格式的模式。包含段落分隔符的行將僅用作分隔符,它們不會被包含在輸出中。預設的段落分隔符是空白行。 

-q 禁止所有寫入到標準輸出的操作,不管是否為匹配行。如果選擇了輸入行,則以零狀態退出。-q 標誌同 -c 和 -l、-n 標誌的任意組合一起使用時,其作用類似於僅使用了 -q 標誌。 

-r 遞迴地搜尋目錄。在預設情況下,按照到目錄的鏈結。 

-r 遞迴地搜尋目錄。在預設情況下,不按照到目錄的鏈結。 

-s 禁止通常因為檔案不存在或不可讀取而寫入的錯誤資訊。其他的錯誤資訊並未被禁止。 

-v  顯示所有與指定模式不匹配的行。 

-w 執行單詞搜尋。 

-x 顯示與指定模式精確匹配而不含其他字元的行。 

-y 當進行比較時忽略字元的大小寫。 

patternlist 指定將在搜尋中使用的乙個或多個模式。這些模式將被視作如同是使用 -e 標誌指定的。 

file 指定將對其進行模式搜尋的檔案的名稱。如果未給出 file 變數,將使用標準輸入。 

退出狀態 

此命令返回以下出口值: 

0 找到匹配項。 

1 未找到匹配項。 

>1 發現語法錯誤,或者檔案不可訪問(即使找到了匹配項)。 

示例 若使用包含以下模式匹配字元的模式:*, ^, ?, [, ], \(, \), \,請輸入: 

grep  "^[a-za-z]"  pgm.s 

這將顯示 pgm.s 中第乙個字元為字母的所有行。 

若顯示所有與模式不匹配的行,請輸入: 

grep   -v  "^#" pgm.s 

這將顯示 pgm.s 中首字母不是 #(井字元)的所有行。 

若顯示檔案 file1 中與abc 或 xyz 字串匹配的所有行,請輸入: 

grep -e  "abc|xyz"  file1 

若在名為 test2 的檔案中搜尋 $(美元符號),請輸入: 

grep \\$ test2 

為了強制 shell 將 \$(單反斜槓和美元符號)傳遞給 grep 命令,必須要使用 \\(雙反斜槓)。\(單反斜槓)字元可通知 grep 命令將其後的字元(本例中為 $)視作原義字元而不是表示式字元。如果使用 fgrep 命令,則可以不必使用反斜槓之類的轉義字元。 

grep –r ibm /tmp  或 

grep –r -h ibm /tmp 

grep –r ibm /tmp  或 

grep -r -l ibm /tmp 

檔案 /usr/bin/grep 包含 grep 命令。 

grep 查詢檔案中內容

grep 工具的工作方式是對檔案的每一行搜尋給定字串的首次出現.如果找到了這個字串,就列印該行的內容 否則就不對該行進行列印.grep welcoming demo.log 從demo.log中查詢包含welcoming 的行 grep中可以使用萬用字元和元字元,把他們放到引號中,這樣shell就不...

用grep查詢檔案內容

ctrl r 搜尋執行過的命令 alt 字母 選單欄快捷鍵,然後選擇即可,例如 alt f彈出檔案選單,然後按b,則兩個標籤了。1.關於終端的快捷鍵 tab tab鍵是比較常用的乙個快捷鍵,它的作用是補全檔名或者路徑。舉例來說,輸入 cd ho 在按一下tab鍵,終端裡就會顯示 cd home 了。...

Linux查詢檔案內容(grep)

from 如果想忽略大小寫,可以用 i引數 如果想搜尋目錄裡所有檔案,包括子目錄的話,並且在結果中顯示行號,可以用以下命令 grep的語法支援正規表示式,正規表示式有些複雜,以後再講解。下面是一些有用的引數 如果我們想把搜尋結果儲存起來,那麼可以把命令的標準輸出重定向到檔案 重定向符號 和管道操作符...