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这个单词