grep 是 globally regular expression print 的缩写,是我们在管理 Linux 服务器时,常用的命令之一,比如查看配置文件或者搜索日志等里面的特定内容就经常用到该命令。
掌握了grep 的常见用法,我们已经可以应付日常的 Linux 服务器维护工作了,如果需要掌握复杂的技巧,其实并不是 grep 的用法,而是正则表达式了。下面给大家介绍常用的grep用法以及配合简单的正则表达式的用法。
常见参数格式
grep 主要有两种使用方法,一种是直接查找文件中的指定字符串,另一种是使用管道从输出结果中查找指定字符串。结合上一篇文章SSH服务安全优化中的配置文件 /etc/ssh/sshd_config, 查找文件中包含 Client 和 port 字样的行:
# grep Client /etc/ssh/sshd_config # sshd -T | grep port
忽略大小写
使用 -i
参数可以忽略查找字符串的大小写。
显示位于第几行
使用 -n
参数可以查看特定字符串位于第几行。我们在修改配置文件的时候,可以使用 vi 编辑器的查找功能,也可以先用grep看看需要修改的配置位于哪里,直接去修改。
排除特定字符串
使用 -v
参数可以排除特定的字符串。
统计出现的次数
使用 -c
参数可以统计特定字符串出现的次数,和 -v
搭配使用,可以统计没出现的次数。
递归执行
递归执行有两个参数,-r
和 -R
,区别是 -r
不搜索链接文件,-R
搜索链接文件。
只显示文件名
使用 -l
参数只显示文件名。当和 -r
或者 -R
参数合用时,假如我们不需要显示具体内容,只要知道哪个文件中有特定的字符串,可以使用该参数。
如果不显示匹配的文件名,那可以使用 -L
参数。
使用正则表达式
正则表达式可以很灵活地查找指定字符串,但是写好正则表达式本身就有一定的难度,很多时候我们可能也不怎么用的上,所以就给大家介绍几种简单的使用正则表达式的方法。当然,正则表达式可以和前面的常见参数一起使用。
完全匹配特定字符串的行
使用 \b
表示字符串的边界,比如我们要查找 sshd_config 文件中的 Protocol 字符串:
grep '\bProtocol\b' /etc/ssh/sshd_config
查找以特定字符串开头的行
使用 ^
表示字符串的开始,比如我们要查找以 pro 开头的,和 -i 共用,可以忽略大小写。
grep '^pro' -i /etc/ssh/sshd_config
查找以特定字符串结尾的行
使用 $
表示字符串的结尾,比如我们要查找以 2 结尾的行:
grep '2$' /etc/ssh/sshd_config
扩展阅读
1、GNU 网站下的 grep 介绍:https://www.gnu.org/software/grep/
2、w3c school 的正则表达式教程:https://www.w3cschool.cn/zhengzebiaodashi/