grep(global search regular expression(RE) and print out the line,全面搜尋正規表達式并把行列印出來)是一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來。
這也是一個我們比較常用的指令之一,好多時候雖然沒通過系統的學習,但是我們還是會經常用到。通過幫助文檔我們可以得知,egrep、fgrep是grep的别名。網上一些文章說egrep、fgrep與grep有差別,這種說法是不準确的。讓我們來用實際例子來看一下:
再通過man看一下:
但是,pgrep跟grep就有點差別了,大家可别搞混淆啦!接下來的内容就隻扯grep這個梗!
1.指令格式(用法)
在每個 FILE 或是标準輸入中查找 PATTERN。
預設的 PATTERN 是一個基本正規表達式(縮寫為 BRE)。
例如: grep -i ‘hello world’ menu.h main.c
2.選項(也就是上面提到的:OPTIONS)
以上内容均來自grep –help,本人僅作部分翻譯及收集整理。更多詳細内容可以參考:man grep。
3.使用示例
幫助内容看起來有點多,我們就挑選比較常用的來學習好了。
(1)正常用法
-a :将二進制檔案以文本檔案的方式查找資料,也就是不忽略二進制檔案内的查找。
-c :計算找到 ‘搜尋字元串’ 的次數。
-i :忽略大小寫的不同,所有大小寫視為相同。
-n :輸出查找到内容的行号。
-v :反向選擇,不包含搜尋内容的全部内容都輸出。
在以上操作中為了快速找到搜尋内容,可以加–color=auto,我的螢幕上輸出的内容是粉紅色的,很顯眼。
-w:搜尋内容完全比對字詞。
-A :後面可加數字,為 after 的意思,除了列出該行外,後續的 n 行也列出來。
-B :後面可加數字,為 befer 的意思,除了列出該行外,前面的 n 行也列出來。
(2)進階用法
\:轉義。
^:比對字元串開始。
$:以比對字元串結尾。
.:比對除換行符之外的任意單個字元。
這裡必須用圖檔展示才能闡釋清楚了,請看粉紅色部分!
[]:比對中括号内部的任意一字元。
[-]:配置中括号内指定範圍的任意一字元。
?:比對之前的項一次或0次(單獨的?是不支援基本表達式的,注意區分以下2圖)。
+:比對之前的項一次或者多次。
*:比對0次或多次,比較常用。
{}:比對之前的項n次,n可以為0。
{m,}:比對之前的項至少m次。
{m,n}:比對之前的項至少m次,之多n次。
():用于建立一個比對的子串。
|:交替比對|兩邊的任意一項。
最常用的正規表達式至此基本介紹完畢。
在後面的sed及awk的使用中仍然會使用到正規表達式,在相關部分又繼續介紹POSIX及元字元類的表達式。