shell中grep命令及常用語法
【背景】
grep的全稱是global regular expression print,是linux中最強大的文字搜尋命令之一,常用於搜尋文字檔案中是否含有某些特定模式的字串。該命令以行為單位讀取文字並使用正則表示式進行匹配,匹配成功後打印出該行文字。
【命令格式】
grep [option] "string_to_find" filename
常見選項:
(1)-i:忽略搜尋字串的大小寫
(2)-v:取反,即輸出不匹配的那些文字行
(3)-n:輸出行號
(4)-l:輸出能夠匹配模式的檔名,相反的選項為-L
(5)-q:靜默輸出
選項是可選的,根據實際需求進行選擇即可
string_to_find為需要匹配的模式,可以填寫字串或者正則表示式
filename為需要查詢的檔案的名稱
【常見用法】
1.統計檔案中能夠匹配的行數
涉及選項:
(1)-c:計算匹配成功的行數
例子:
(1)輸出text.txt中含有hello字串的行的數量:
grep -c "hello" text.txt
2.統計檔案中匹配的數量
涉及選項:
(1)-o:只輸出匹配到的文字部分
例子:
(1)輸出text.txt中含有hello的數量:
grep -o "hello" text.txt | wc -l
注意這個例子和上個的區別,-c選項在遇到一行中多次匹配正則表示式的情況時只是認為這一行匹配成功,而不會計算匹配成功的次數
3.遞迴搜尋
涉及選項:
(1)-r:grep的引數filename為目錄時可以加上本選項表示遞迴搜尋
例子:
(1)從test_dir開始遞迴查詢含有hello的行:
grep -r "hello" test_dir
這個選項很適用於在工程中搜索某些特定字串
4.匹配多個正則表示式
涉及選項:
(1)-e:該選項加上正則表示式就是一個需要匹配的模式
例子:
(1)找出匹配hello或者world的行:
grep -e "hello" -e "world" test.txt
5.指定/排除檔案
涉及選項:
(1)--include:指定需要搜尋的檔案
(2)--exclude:排除需要搜尋的檔案
(3)--exclude-dir:排除需要搜尋的目錄
例子:
(1)搜尋src目錄中.c和.cpp檔案中的含有main的行:
grep -r "main" ./src --include *.{c,cpp}
(2)搜尋src目錄中含有main的行,但不搜尋readme檔案:
grep -r "main" ./src --exclude "readme"
(3)搜尋src目錄中含有main的行,但不搜尋.git資料夾:
grep -r "main" ./src --exclude-dir ".git"
6.零值位元組
涉及選項:
(1)-Z:設定輸出的文字之間以'\0'作為分隔符
例子:
(1)刪除含有hello字串的檔案:
grep -r "hello" ./src -lZ | xargs -0 rm -f
注意如果不使用-Z選項,則輸出的檔名之間以空格符分隔。那麼如果有個檔案的檔名本身就是包含空格的,則該檔案會被認為是兩個檔案,就可能造成誤刪