grep命令是支持正則表達式的一個多用途文本搜索工具,一般格式為:
grep [選項] [模式] [文件...]
grep命令由選項,模式和文件三部分組成,他在一個或多個文件中搜索滿足模式的文本航,模板后所有的字符串被看做文件名,文件名可以有多個,搜索的結果被打印到屏幕,不影響源文件內容,grep命令的選項及其意義如表所示:
選項 | 意義 |
-c |
只輸出匹配行的數量 |
-i | 搜索時忽略大小寫 |
-F | 不支持正則表達式,按字符串字面意思搜索 |
-h | 查詢多文件時不顯示文件名 |
-l | 只列出符合匹配的文件名,而不列出具體的匹配行 |
-n | 列出所有匹配行,並顯示行號 |
-s | 不顯示不存在或無匹配文本的錯誤信息 |
-v | 顯示不包含匹配文本的所有行 |
-w | 匹配整詞 |
-x | 匹配整行 |
-r | 遞歸搜索當前及子目錄 |
-q | 禁止輸出任何結果,以退出狀態表示搜索是否成功 |
-b | 打印匹配行距文件頭部的偏移量,以自己為單位 |
-o | 與-b結合使用,打印匹配詞距頭部文件的偏移量 |
-E | 支持擴展正則表達式 |
1. -c 選項
-c表示輸出匹配字符串行的數量
[root@linuxTest Desktop]# grep -c name linuxNote 1
2 -n選項
-n選項列出所有的匹配行,並顯示行號
[root@linuxTest Desktop]# grep linuxTest -n linuxNote 2:[root@linuxTest ~]# brctl show 9:[root@linuxTest ~]# virsh list --all 15:[root@linuxTest ~]# virsh start centos 18:[root@linuxTest ~]# virsh domiflist centos
3. -v選項
-v反選,即顯示不包含模式的所有行。
[root@linuxTest Desktop]# grep linuxTest -v linuxNote 查看linux bridge的配置: bridge name bridge id STP enabled interfaces br0 8000.f8cab817ea1b no em1 vnet0 virbr0 8000.5254002db1be yes virbr0-nic
4.-i 選項
默認情況選,grep是大小寫敏感的,加上-i選項后,不區分大小寫。
[root@linuxTest Desktop]# grep linuxtest -i linuxNote [root@linuxTest ~]# brctl show [root@linuxTest ~]# virsh list --all [root@linuxTest ~]# virsh start centos [root@linuxTest ~]# virsh domiflist centos
5.-h選項
-h選項表示查詢多文件時不顯示文件名
[root@linuxTest Desktop]# grep linuxTest -h linuxNote test [root@linuxTest ~]# brctl show [root@linuxTest ~]# virsh list --all [root@linuxTest ~]# virsh start centos [root@linuxTest ~]# virsh domiflist centos linuxTest linuxTest 1111
6.-l 選項
-l 選項只列出符合匹配的文件名,而不列出具體行
[root@linuxTest Desktop]# grep linuxTest -l linuxNote test
linuxNote
test
7.-r 選項
默認情況下grep只對當前目錄進行搜索,-r表示遞歸搜索,不僅搜索當前目錄,而且搜索子目錄
[root@linuxTest Desktop]# grep memory -ir * Binary file rhel-server-6.7-x86_64-dvd.iso matches Binary file SW/cherrytree-0.30.5.tar matches SW/cherrytree-0.30.5/windows/de_DE.dic:Memorymap/m SW/cherrytree-0.30.5/windows/de_DE.dic:memorymap/ozm SW/cherrytree-0.30.5/windows/pl.dic:MemoryStick SW/cherrytree-0.30.5/windows/pl.dic:memoryzacja/AMNn Binary file SW/cherrytree-0.30.5/locale/cs/LC_MESSAGES/cherrytree.mo matches
8. -q選項
grep命令師默認輸出結果的,-q則不輸出結果,而是已退出的狀態來表示是否成功,退出狀態0表示搜索成功,退出狀態1表示表示未搜索到滿足模式的行,退出狀態2表示由於程序錯誤未能執行
[root@linuxTest Desktop]# grep linuxTest -q linuxNote test [root@linuxTest Desktop]# echo $? 0 #退出狀態是0 [root@linuxTest Desktop]# grep cccc -q linuxNote test [root@linuxTest Desktop]# echo $? 1 #退出狀態是1 [root@linuxTest Desktop]# grep cccc -q -x dsf grep: dsf: No such file or directory [root@linuxTest Desktop]# echo $? 2 #沒有該文件,退出狀態是2
grep和正則表達式結合使用的例子
1.匹配行首
#以字母v開頭的行 [root@linuxTest Desktop]# grep ^v linuxNote virbr0 8000.5254002db1be yes virbr0-nic vnet0 bridge br0 e1000 52:54:00:9c:5e:fc
2. 查找空白行
[root@linuxTest Desktop]# grep -c ^$ linuxNote 2
3.精確匹配
“\<\>”用於精確匹配
[root@linuxTest Desktop]# grep Test test linuxTest linuxTest 1111 Test [root@linuxTest Desktop]# grep "\<Test\>" test Test #第二個命令當中,只精確匹配了Test這個單詞