grep过滤器在文件中搜索特定的字符模式,并显示包含该模式的所有行。在文件中搜索的模式被称为正则表达式(grep代表正则表达式的全局搜索和打印)。
语法:
grep [options] pattern [files]
常规选项:
- -c :只打印匹配模式的行数
- -h:只显示匹配的行,不显示文件名。
- -i:忽略,大小写匹配
- -l:只显示文件名列表。
- -n:显示匹配的行及其行号。
- -v:打印出所有不匹配的行
- -e exp:指定带该选项的表达式。可多次使用。
- -f file:从文件中获取模式,每行一个。
- -E:将模式视为扩展正则表达式(ERE)
- -R:递归搜索(也可以用-r)
- -w:匹配整个单词
- -o:只打印匹配行的匹配部分,每个这样的部分在单独的输出行。
- -A n:在结果后打印查询的行和n行。
- -B n:输出搜索行和结果前n行。
- -C n:打印搜索的行和在结果之前的n行。
- –include:包含某些文件
- exclude:排除某些文件
案例:
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# cat student.txt
zhangsan 男 20
lisi 男 19
wangwu 男 21
zhaoliu 男 18
xiaogang 男 20
xiaohong 女 19
xiaoming 女 22
majun 男 19
wugang 男 20
1:查看里面是否有包含lisi的学生
[root@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep lisi student.txt
lisi 男 19
2:查看lisi的数据是在第几行
[root@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep -c lisi student.txt
1
3:查看名字中包含字母o的学生
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep -e ‘.*o*.’ student.txt
zhaoliu 男 18
xiaogang 男 20
xiaohong 女 19
xiaoming 女 22
4:查出哪几个文件的内容包含有zhangsan
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep -l zhangsan student.txt testscript.txt
student.txt
5:使用grep匹配多个模式
grep -e “pattern1” -e “pattern2”
6:查出某个目录下面的包含有model内容的php文件和html文件
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep ‘model’ -rl /www/wwwroot/blog/ –include *.{php,html}
7:查出某个目录下面的包含有model内容的文件,排除掉php文件和html
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep ‘model’ -rl /www/wwwroot/blog/ –exclude *.{php,html}
8:打印出所有不匹配的行
[zhangsan@iZ2ze9v82ax0ox0j12ahfhZ tmp]# grep -v zhangsan student.txt
lisi 男 19
wangwu 男 21
zhaoliu 男 18
xiaogang 男 20
xiaohong 女 19
xiaoming 女 22
majun 男 19
wugang 男 20
参考资料:
《Linux Shell脚本攻略(第3版)》