1. 程式人生 > >grep,egrep,fgrep和pgrep之間的區別

grep,egrep,fgrep和pgrep之間的區別

本文內容從:https://www.cnblogs.com/itech/p/5535080.html 翻譯而來

1、grep

grep是“Global Regular Expressions Print”的首字母縮寫詞,意為全域性正則表示式列印。

grep是一個逐行掃描指定檔案或檔案的程式,返回包含模式的行。模式是一種表示式,它通過將字元解釋為元字元來指定一組字串。例如,星號元字元(*)被解釋為“前面元素的零個或多個”。這使使用者能夠在grep命令中鍵入一系列短字元和元字元,以使計算機向我們顯示哪些檔案匹配的行。

標準grep命令如下所示:
grep <flags> '<regular expression>' <filename>


grep將搜尋結果列印到螢幕(stdout)並返回以下退出值:

0 A match was found.
1 No match was found.
>1 A syntax error was found or a file was inaccessible
(even if matches were found).

一些常見的標誌是:

-c 用於計算成功匹配的數量而不列印實際匹配
-i 以使搜尋大小寫不敏感
-n 在每個匹配列印輸出之前列印行號
-v 以獲取正則表示式的補碼(即返回行不匹配)
-l 列印帶有與表示式匹配的行的檔案的檔名

2、egrep

egrep是“Extended Global Regular Expressions Print”的首字母縮寫詞。

egrep中的’E’表示將模式視為正則表示式。在Egrep中啟用了“擴充套件正則表示式”縮寫為“ERE”。egrep(與grep -E相同)將 +, ?, |, (, ) 作為元字元。
在基本的正則表示式(使用grep),元字元 ?, +, {, |, (, ) 失去了特殊的意義。如果你想用grep對待這些字元作為元字元,需要轉義 ?, +, {, |, (,)。
例如,grep使用基本的正則表示式,其中plus按字面處理,返回任何帶有加號的行。
grep "+" test.txt

[[email protected] ~]# grep + test.txt 
search plus test file,line 2 have a +
have + +
[[email protected] ~]# 

另一方面,egrep將“+”視為元字元並返回每一行,因為plus被解釋為“一次或多次”。
egrep "+" test.txt

[[email protected] ~]# egrep + test.txt 
search plus test file,line 1 no plus
search plus test file,line 2 have a +
no plus
have + +
[[email protected] ~]# 

這裡返回每一行,因為egrep將 + 視為元字元。普通grep只搜尋帶有文字的行 +。

3、fgrep

fgrep是"Fixed-string Global Regular Expressions Print"的首字母縮寫,意為固定字串全域性正則表示式列印。

fgrep(與grep -F相同)是固定的或快速的grep,其行為與grep相同,但不會將任何正則表示式元字元識別為特殊的。搜尋將更快完成,因為它只處理簡單的字串而不是複雜的模式。

例如,如果我想在我的.bash_profile中搜索文字點.(dot),那麼使用grep將很困難,因為我必須避開點,因為dot是一個元字元,意思是“任何單個字元”:

[[email protected] ~]# grep "." test.txt 
search dot test file,line 1 no dot
search dot test file,line 2 have a dot .
no dot
have a ...
[[email protected] ~]# 

上面的命令返回test.txt的每一行。改為:fgrep "." test.txt

[[email protected] ~]# fgrep . test.txt 
search dot test file,line 2 have a dot .
have a ...
[[email protected] ~]# 

然後只返回具有文字’.'的行。fgrep幫助我們不用再費心避開元字元。

4、pgep

pgrep是首字母縮略詞,代表“Process-ID Global Regular Expressions Print”。

pgrep檢視當前正在執行的程序,並將與選擇條件匹配的程序ID列出到stdout(螢幕)。當你想要某個程序的PID時,pgrep很方便。
例如,如果我只想知道我的nginx程序的程序ID,使用pgrep nginx將返回程序ID 值 ,如:

[[email protected] ~]# pgrep nginx
71982
71984
[[email protected] ~]# 

使用-l引數返回程序ID同時顯示程序名,如pgrep -l nginx

[[email protected] ~]# pgrep nginx -l
71982 nginx
71984 nginx
[[email protected] ~]# 

附:
1、grep命令格式1

grep [-acinv] [–color=auto] ‘搜尋字串’ filename
選項與引數:
-a :將 binary 檔案以 text 檔案的方式搜尋資料
-c :計算找到 ‘搜尋字串’ 的次數
-i :忽略大小寫的不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 ‘搜尋字串’ 內容的那一行!
–color=auto :可以將找到的關鍵詞部分加上顏色的顯示喔!

2、grep設定查詢匹配結果顏色高亮2

使用grep --color的–color選項可以給搜尋匹配結果顏色高亮(單次有效),如果要每次都能自動新增顏色,可按如下修改~/.bashrc檔案:

vim ~/.bashrc
alias grep='grep --color'
source ~/.bashrc

–color有三個值供選擇:never、always、auto。always和auto的區別就是,always會在任何情況下都給匹配欄位加上顏色標記,當通過管道或重定向時就會多出一些控制字元,結果會變成
export [[1;32m[[KGREP[[m[[K_OPTIONS=’–color=always’
export [[1;32m[[KGREP[[m[[K_COLOR=‘1;32’
而auto則只在輸出到終端時才加上顏色。

也可以通過設定GREP_COLOR的值來指定顏色
export GREP_OPTIONS='--color=auto'
具體用什麼顏色,可以通過
export GREP_COLOR='a;b'來設定,預設是1;31,即高亮的紅色 ,其中:
a可以選擇:【0,1,4,5,7,8】

0 關閉所有屬性
1 設定高亮度
4 下劃線
5 閃爍
7 反顯
8 消隱

下面是部分顏色的值

30 black
31 red
32 green
33 yellow
34 blue
35 purple
36 cyan
37 white

以上設定只針對當前使用者有效,如果對所有使用者生效,可按上述方法修改/etc/profile檔案。

3、正則表示式

正則表示式相關文章:



  1. grep設定查詢顏色高亮 https://blog.csdn.net/mojinchuan/article/details/51899787 ↩︎

  2. 在linux下給grep命令新增顏色 http://blog.csdn.net/diy534/article/details/7025640 ↩︎