grep--文本搜索工具
1 grep的基礎使用
用於在指定的文件列表中查找指定的匹配樣本。
如果指定文件中的內容包含符合所指定的樣式,那麼含有樣式的那一行會顯示出來;未找到則不顯示任何內容。
1.1 grep命令的基本使用方式
grep[選項][匹配樣本][文件列表]
如果不指定文件名列表,或使用的文件名爲“-”,那麼grep指令會從標準輸入設備讀取數據進行匹配。
在使用grep命令時,一定要提供一個文件的檢索路徑,否則grep命令會一直等待用戶輸入,直至程序中斷
1.2 grep選項
選項名稱 | 作用 |
---|---|
-c | 只輸出匹配行的計數,不顯示匹配的內容 |
-i | 不區分大小寫(只適用於單個字符) |
-h | 查詢多文件時不顯示文件名 |
-n | 顯示匹配行及行號 |
-s | 不顯示不存在或無匹配文件的錯誤信息 |
-v | 顯示不包含匹配的所有行 |
-E | 允許使用擴展模式匹配 |
其他的選項可以通過
man grep
進行查看。
在使用grep命令實現檢索多個關鍵字時,其選項一般使用大寫的字符E。
grep -E "hello|Hello" xxx.txt
2 grep和正則表達式
表達式可以使用單引號或者雙引號括起來, 區別是單引號無法引用變量而雙引號可以。
[]
匹配一個指定範圍內的字符 ,[Gg]rep'匹配Grep和grep
爲了在文本檢索過程中,使正則表達式的匹配能夠順利進行,正則表達式需要使用引號括起來。
grep -E "#[h,H]e[l,L]*" xxx.sh grep -E "*[1-9][1-9].[A,Z]*" xxx.sh
^ $
脫字符^ 匹配行首
美元符號$ 匹配行尾
匹配空行的時,將脫字符和美元符號放在一起使用,從而使得行首和行尾之間沒有其他的字符。
# 匹配空行 grep -c '^$' xxx.txt
可以應用於查找文件中空行的行數。
*
星號* 除了匹配多個文件之外,還可以用來匹配零個或者多個字符。
.
點號.匹配單個字符,這個字符可以是任意的字符。
{}
大括號{} 可用於限定某些字符出現的次數。只有該字符出現的次數匹配成功了,那麼整個匹配纔算成功。
# 匹配字符1至少出現2次 grep "1\{2\}" xx.txt # 匹配字符1出現1-2次 grep "1\{1,2\}" xx.txt
“{}”在正則表達式中屬於特殊符號,因此需要使用轉義字符“\”將符號"{}"轉義成普通符號。
\
轉義字符\ 在正則表達式中如果需要將特殊符號進行匹配,那麼需要在特殊符號前面加上'\'進行轉義,然後特殊字符就能像普通字符一樣進行匹配了。
3 grep命令的拓展使用
類名的使用
使用grep命令的時候,除了使用正則表達式之外,還可以使用國際模式匹配的類名來代替正則表達式。
國際模式匹配的類名將正則表達式中的一些常用字符進行了“封裝“,使用特定的字符進行表示,從而使用的更加方便。
常用的類名和正則表達式的關係如下表:
國際模式匹配的類名 | 對應的正則表達式 | 作用 |
---|---|---|
[[:upper:]] | [A-Z] | 匹配大寫字符 |
[[:lower:]] | [a-z] | 匹配小寫字符 |
[[:digit:]] | [0-9] | 匹配數字 |
[[:alnum:]] | [0-9a-zA-Z] | 匹配字符和數字 |
[[:space:]] | 空格或TAB | 匹配空格 |
[[:alpha:]] | [a-zA-Z] | 匹配字符,包括大小寫字符 |
egrep
egrep = grep -E
egrep[選項][匹配模板][查找文件列表]
egrep使用方式於grep相似
egrep存在一些grep命令沒有的選項,如下表
選項/符號 | 作用 | 實例 |
---|---|---|
加號+ | 匹配一個或多個字符 | 'a+[a-z]+[0-9]' |
(|) | 匹配字符串 | (root|unbntu) |
擴展表達式: + 匹配一個或者多個先前的字符, 至少一個先前字符. ? 匹配0個或者多個先前字符. a|b|c 匹配a或b或c () 字符組, 如: love(able|ers) 匹配loveable或lovers. (..)(..)\1\2 模板匹配. \1代表前面第一個模板, \2代第二個括弧裏面的模板. x{m,n} =x{m,n} x的字符數量在m到n個之間.
fgrep
fgrep = grep -f
fgrep常用於爲文件搜索字符串
一般將模式當作固定字符串來處理,因此其處理速度很快,但是其搜索功能與grep相比,相對較弱。
fgrep[選項][匹配模板][查找文件列表]
處理的結果,如果找到符合要求的數據,那麼該命令就會返回0;如果未找到匹配的內容,其返回爲1。如果返回值是大於1的數,那麼該命令執行過程中會發生語法錯誤,或者是查找的目標文件不存在,需要對命令重新編寫。
在使用fgrep命令時,還需要將每行輸入數據限制在2048個字節。一個段落一般限制在5000個字符的長度,並且部分選項不能重疊使用,否則會引起標誌位的覆蓋。
fgrep "hao" *.txt
在fgrep命令中,匹配的模板都被看作是字符串,因此,所有的元字符都作爲普通字符來處理。
4 grep命令使用實例
1 目錄搜索--查找指定目錄或文字
查找某些文件放在哪個目錄中,或是在文件中存在哪些內容。
如果僅查找文件的位置,可以使用find命令。
# 在當前目錄文件中朝朝文件xxx.txt ls -l | grep xxx.txt
2 使用ps命令檢索特定的進程
ps -ef | grep squid