shell -- grep

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

 

參考資料

https://blog.csdn.net/xiaoxinyu316/article/details/46729443

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章