天天看點

Linux三劍客之grep

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)進階用法

\:轉義。

^:比對字元串開始。

$:以比對字元串結尾。

.:比對除換行符之外的任意單個字元。

Linux三劍客之grep

這裡必須用圖檔展示才能闡釋清楚了,請看粉紅色部分!

[]:比對中括号内部的任意一字元。

[-]:配置中括号内指定範圍的任意一字元。

?:比對之前的項一次或0次(單獨的?是不支援基本表達式的,注意區分以下2圖)。

Linux三劍客之grep
Linux三劍客之grep

+:比對之前的項一次或者多次。

Linux三劍客之grep

*:比對0次或多次,比較常用。

Linux三劍客之grep

{}:比對之前的項n次,n可以為0。

Linux三劍客之grep

{m,}:比對之前的項至少m次。

Linux三劍客之grep

{m,n}:比對之前的項至少m次,之多n次。

Linux三劍客之grep

():用于建立一個比對的子串。

|:交替比對|兩邊的任意一項。

最常用的正規表達式至此基本介紹完畢。

在後面的sed及awk的使用中仍然會使用到正規表達式,在相關部分又繼續介紹POSIX及元字元類的表達式。

繼續閱讀