全面搜尋正規表示式(global search regular expression(re) ,grep)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。
unix/linux的grep家族包括grep、egrep和fgrep,其中egrep和fgrep的命令跟grep有細微的區別,egrep是grep的擴充套件,支援更多的re元字元, fgrep是fixed grep或fast grep簡寫,它們把所有的字母都看作單詞,正規表示式中的元字元表示其自身的字面意義,不再有其他特殊的含義,一般使用比較少。
目前linux作業系統預設使用gnu版本的grep。它功能更強,可以通過-g、-e、-f命令列選項來使用egrep和fgrep的功能。其語法格式及常用引數詳解如下:
grep -[acinv] 'word' filename
grep常用引數詳解如下:
-a 以文字檔案方式搜尋;
-c 計算找到的符合行的次數;
-i 忽略大小寫;
-n 順便輸出行號;
-v 反向選擇,即顯示不包含匹配文字的所有行;
-h 查詢多檔案時不顯示檔名;
-l 查詢多檔案時只輸出包含匹配字元的檔名;
-s 不顯示不存在或無匹配文字的錯誤資訊;
-e 允許使用egrep擴充套件模式匹配。
學習grep時,需要了解萬用字元、正規表示式兩個概念,很多讀者容易把彼此搞混淆,萬用字元主要用在linux的shell命令中,常用於檔案或者檔名稱的操作,而正規表示式用於文字內容中的字串搜尋和替換,常用在awk、grep、sed、vim工具中對文字的操作。
萬用字元型別詳解:
* 0個或者多個字元、數字;
? 匹配任意乙個字元;
# 表示註解;
| 管道符號;
; 多個命令連續執行;
& 後台執行指令;
! 邏輯運算非;
[ ] 內容範圍,匹配括號中內容;
命令塊,多個命令匹配。
正規表示式詳解:
* 前乙個字元匹配0次或多次;
. 匹配除了換行符以外任意乙個字元;
.* 代表任意字元;
^ 匹配行首,即以某個字元開頭;
$ 匹配行尾,即以某個字元結尾;
\(..\) 標記匹配字元;
匹配中括號裡的任意指定字元,但只匹配乙個字元;
[^] 匹配除中括號以外的任意乙個字元;
\ 轉義符,取消特殊含義;
\< 錨定單詞的開始;
\> 錨定單詞的結束;
匹配字元出現n次;
匹配字元出現大於等於n次;
匹配字元至少出現n次,最多出現m次;
\w 匹配文字和數字字元;
\w \w的反置形式,匹配乙個或多個非單詞字元;
\b 單詞鎖定符;
\s 匹配任何空白字元;
\d 匹配乙個數字字元,等價於[0-9]。
常用grep工具企業演練案列:
grep -c "test" file.txt 統計test字元總行數;
grep -i "test" file.txt 不區分大小寫查詢test所有的行;
grep -n "test" file.txt 列印test的行及行號;
grep -v "test" file.txt 不列印test的行;
grep "test[53]" file.txt 以字元test開頭,接5或者3的行;
grep "^[^test]" file.txt 顯示輸出行首不是test的行;
grep "[mm]ay" file.txt 匹配m或m開頭的行;
grep "k…d" file.txt 匹配k,三個任意字元,緊接d的行;
grep "[a-z][9]d" file.txt 匹配大寫字母,緊跟9d的字元行;
grep "t\" file.txt 列印字元t字元連續出現2次以上的行;
grep "t\" file.txt 列印字元t字元連續出現4次及6次的行;
grep -n "^$" file.txt 列印空行的所在的行號;
grep -ve "#|^$" file.txt 不匹配檔案中的#和空行;
grep --color -ra -e "db|config|sql" * 匹配包含db或者config或者sql的檔案;
grep --color -e "\<([0-9]\.)([0-9])\>" file.txt 匹配ipv4位址。
SHELL程式設計四劍客之Grep工具
全域性搜尋正規表示式 global search regular expression re grep 是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。我們可能看到別人不光使用grep,還有egrep fgrep等擴充套件工具,目前linux作業系統預設都是使用gnu版本...
linux四劍客之grep
1 grep linux系統中grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹 配的行列印出來。grep全稱是global regular expression print,表示全域性正規表示式版本,它的使用許可權是所有使用者。linux三劍客老三過濾需要的內容,v排除內容,...
Shell程式設計四劍客之AWK
awk是乙個優良的文字處理工具,linux 及unix 環境中現有的功能最強大的資料處理引擎之一,以aho weinberger kernighan三位發明者名字首字母命名為awk,awk是乙個行級文字高效處理工具,awk經過改進生成的新的版本有nawk gawk,一般linux預設為gawk,ga...