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、正則表示式
正則表示式相關文章:
- 百度百科:正則表示式
- 正則表示式(grep,egrep,fgrep) https://blog.csdn.net/dyllove98/article/details/41284705
- 菜鳥教程-正則表示式 http://www.runoob.com/regexp/regexp-tutorial.html
grep設定查詢顏色高亮 https://blog.csdn.net/mojinchuan/article/details/51899787 ↩︎
在linux下給grep命令新增顏色 http://blog.csdn.net/diy534/article/details/7025640 ↩︎