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.