shell程式設計grep命令詳解
grep命令
GREP是Global search Regular Expression and Print out the line的簡稱,即全面搜尋正則表示式並把行打印出來。GREP是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。
1、grep命令基本用法
grep命令是支援正則表示式的一個多用途文字搜尋工具,grep的一般格式為:
grep [選項] [模式] [檔案...]
grep命令由選項、模式和檔案三部分組成,它在一個或多個檔案中搜索滿足模式的文字行,模式後的所有字串被看做檔名,檔名可以有多個,搜尋的結果被列印到螢幕,不影響原檔案的內容。Grep命令的選項用於對搜尋過程進行補充說明。
grep命令選項及其意義:
-c #只輸出匹配行的數量
-i #搜尋時忽略大小寫
-h #查詢多檔案時不顯示檔名
-l #只列出符合匹配的檔名,而不列出具體的匹配行
-n #列出所有的匹配行,並顯示行號
-s #不顯示不存在或無匹配文字的錯誤資訊
-v #顯示不包含匹配文字的所有行
-w #匹配整詞
-x #匹配整行
-r #遞迴搜尋,不僅搜尋當前工作目錄,而且搜尋子目錄
-q #禁止輸出任何結果,以退出狀態表示搜尋是否成功
-b #列印匹配行距檔案頭部的偏移量,以位元組為單位
-o #與-b選項結合使用,列印匹配的詞距檔案頭部的偏移量,以位元組為單位
-E #支援擴充套件的正則表示式
-F #不支援正則表示式,按照字串的字面意思進行匹配
grep命令的模式十分靈活,可以是字串,也可以是變數,還可以是正則表示式。需要說明的是,無論模式是何種形式,只要模式中包含空格,就需要使用雙引號將模式引起來,如果不加雙引號,空格後的單詞容易被誤認為是檔名。大部分情況下,使用單引號將模式引起來也是可以的。
例:模式包含空格時,是否使用雙引號的區別
WORDLIST檔案的內容:
hello, caicai. world: watch, world caicaihello message
message world watch hello into the he shelast into.
last save hello caicai, world: message.
#搜尋WORDLIST檔案中包含watch字串的行,不需要引號引起模式
執行:grep watch WORDLIST
結果:hello, caicai. world:watch, world caicai hello message
message world watch hello into the he she lastinto.
#搜尋WORDLIST檔案中包含hellocaicai字串的行,不用引號將hello caicai引起來的結果
執行:grep hello caicaiWORDLIST
結果:grep: caicai: 沒有那個檔案或目錄
#Shell將caicai解析為檔名,提示沒有此檔案的錯誤
#下面給出WORDLIST檔案中包含hello字串的行
WORDLIST:hello, caicai. world: watch, worldcaicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.
#搜尋WORDLIST檔案中包含hellocaicai字串的行,用引號將hello caicai引起來的結果
執行:grep "hellocaicai" WORDLIST
結果:last save hellocaicai, world: message.
例:grep的多檔案查詢
FILE1檔案的內容:
Shanghai Jiaotong University
University of Toronto
Beijing University
Southeast University
Victory University
FILE2檔案的內容:
Shanghai
Toronto
Beijing
Nanjing
Melbourne
執行:grep Beijing FILE1FILE2
結果:FILE1:BeijingUniversity
FILE2:Beijing
例:用通配表示多檔案
執行:grep Beijing FILE?
結果:FILE1:BeijingUniversity
FILE2:Beijing
1、-c選項
-c選項表示輸出匹配字串行的數量,預設情況下,grep命令打印出包含模式的所有行,一旦加上-c選項,就只顯示包含模式行的數量。
例:grep -c的用法
執行:grep -c Beijing FILE?
結果:FILE1:1 #FILE1檔案中有1行包含Beijing
FILE2:1
2、-n選項
-n選項列出所有的匹配行,並顯示行號。預設情況下,grep搜尋單個檔案時,只顯示每行的內容,搜尋多個檔案時,顯示檔名及每行的內容,加上-n選項後,將在行內容前附加顯示行號。
例:grep -n的用法
執行:grep -n Beijing FILE?
結果:FILE1:3:BeijingUniversity #FILE1檔案的第3行
FILE2:3:Beijing
3、-v選項
-v選項顯示不包含模式的所有行。
例:grep -v的用法
執行:grep -vc BeijingFILE? #同時使用-v和-c選項
結果:FILE1:4 #FILE1檔案中有4行不包含Beijing字串
FILE2:4
4、-i選項
預設情況下,grep命令對大小寫是敏感的,如果加上-i選項就表示grep命令不區分大小寫。
5、-h選項
-h選項表示查詢多檔案時不顯示檔名,預設情況下,grep命令查詢多個檔案時,在匹配行之前顯示檔名,加上-h選項後,grep命令將不再顯示檔名。
例:grep -h的用法
執行:grep -h Beijing FILE?
結果:Beijing University #在匹配行前不再顯示檔名了
Beijing
6、-l選項
-l選項表示只列出符合匹配的檔名,而不列出具體匹配行。
例:grep -l的用法
執行:grep -l Beijing FILE?
結果:FILE1 #只顯示包含Beijing字串的檔名
FILE2
7、-s選項
-s選項表示不顯示不存在或無匹配文字的錯誤資訊,預設情況下,grep在待搜尋檔案不存在或搜尋不到符合模式的文字行時將列印錯誤資訊。
例:grep -s的用法
執行:grep hello caicaiWORDLIST #未使用-s選項
結果:grep: caicai: 沒有那個檔案或目錄 #列印了錯誤資訊
WORDLIST:hello, caicai. world: watch, worldcaicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.
執行:grep -s hello caicaiWORDLIST #使用-s選項後,不列印錯誤資訊
結果:WORDLIST:hello,caicai. world: watch, world caicai hello message
WORDLIST:message world watch hello into thehe she last into.
WORDLIST:last save hello caicai, world:message.