格式:
grep -参数 "条件" 文件名
参数:
-i 忽略大小写
-c 统计匹配的行数
-v 取反,不显示匹配的行
-w 匹配单词
-E 等价于egrep,即启用扩展正则表达式
-n 显示行号
-rl 将指定目录内的文件打印
-A数字 匹配行及以下n行
-B数字 匹配行及以上n行
-C数字 匹配行及上下n行
-q 静默模式,没有任何内容输出,使用$?来判断是
否执行成功
-o 只显示匹配的内容
案列:
案例:检索不能登录的账号名
[root@server ~]# grep -n "/sbin/nologin" /etc/passwd
#检索能登录的使用grep -vn
[root@timeserver ~]# grep -nB5 "sshd" /etc/passwd
[root@timeserver ~]# df -h | grep "/"
#grep是能进行模糊匹配,精确匹配需要使用-w
[root@timeserver ~]# df -h | grep -w "/"
#-o参数只显示匹配的内容
[root@timeserver ~]# df -h | grep -wo "/"
/
元字符 | 作用 |
.(点号) | 匹配任意一个字符 |
* | 匹配前面的字符0次或多次 |
+ | 匹配前一个字符出现1次或多次。 |
? | 匹配前一个字符出现0次或1次。 |
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾。 |
[] | 匹配字符[]集中的任意一个字符 |
[^] | 匹配除字符集中的任意一个字符以外的字符。 |
() | 表示一个子表达式,可以用于分组、捕获或引用。 |
| | 表示逻辑或,匹配两个或多个表达式中的任意一个。 |
\ | 用于转义元字符或特殊字符 |
案例:[ab] : 检索包含a或包含b的行信息,[ ] 中只能表示一个内容
# 检索包含d或者D的行信息
[root@server ~]# grep -n [dD] /etc/passwd
案例:[^ ] : 根据关键字检索后反向显示(反向着色)
# 检索不包含字母o的行信息
[root@server ~]# grep -n [^o] /etc/passwd
# 检索不以r开头且包含oot的行信息
[root@server ~]# grep -n [^r]oot /etc/passwd
# 检索包含7-9的行信息
[root@server ~]# grep -n [7-9] /etc/passwd
# 检索包含数字和字母的行信息
[root@server ~]# grep -n [0-9a-zA-Z] /etc/sos/sos.conf
# 检索以"[" 开头的行信息
[root@server ~]# grep -n "^\[" /etc/sos/sos.conf
注意: 需要过滤元字符时需要加 / 进行转译,去除元字符在正则中的功能,变为普通字符
[root@server ~]# grep -n "^$" /etc/sos/sos.conf
[root@server ~]# grep -n ^[root] /etc/passwd
[root@server ~]# grep -n r..t /etc/passwd
#..代表任意两个字符
[root@server ~]# grep -n ww* /etc/passwd
#*会对左边的字符重复匹配0次或多次
#写两个ww为了防止*对左边的字符匹配0次
? | 将前一项字符进行0次或者1次的重复匹配 |
+ | 将前一项进行1次或者多次的重复匹配 |
(|) | 匹配|符号左边或者右边的字符 |
# 显示/etc/passwd 中以bash结尾的行信息
[root@server ~]# grep -n "bash$" /etc/passwd