- grep命令在一个或多个文件中查找某个字符模式。
- 如果这个模式中包含空格,就必须用引号把它括起来。
grep Tom /etc/passwd
- grep 将在文件中查找/etc/passwd 中查找模式 Tom。
- 结果如下:
- 查找成功,文件中相应行会显在屏幕上
- 没有找到指定的模式,就不会有任何输出
- 指定的文件不是一个合法的文件,屏幕上就会显示报错信息
- 发现了要查找的模式, grep 就返回退出状态 0,表示成功,
- 没找到要查找的模式,返回的退出状态为 1,
- 找不到指定文件时,退出状态将是 2。
ps -ef | grep root
- ps 命令的输出被送到 grep,然后所有包含 root 的行都被打印在屏幕上。
grep选项
选 项 |
功 能 |
-E |
如果加这个选项,那么后面的匹配模式就是扩展的正则表达式,也就是 grep -E = egrep |
-i |
比较字符时忽略大小写区别 |
-w |
把表达式作为词来查找, 相当于正则中的"<...>"(...表示你自定义的规则) |
-x |
被匹配到的内容,正好是整个行,相当于正则"^...$" |
-v |
取反,也就是输出我们定义模式相反的内容 |
-c |
count.统计,统计匹配结果的行数,主要不是匹配结果的次数,是行数。 |
-m |
只匹配规定的行数,之后的内容就不在匹配了 |
-n |
在输出的结果里显示行号,这里要清楚的是这里所谓的行号是该行内容在原文件中的行号,而不是在输出结果中行号 |
-o |
只显示匹配内容, grep 默认是显示满足匹配条件的一行,加上这个参数就只显示匹配结果,比如我们要匹配一个 ip 地址,就只需要结果,而不需要该行的内容。 |
-R |
递归匹配。如果要在一个目录中多个文件或目录匹配内容,则需要这个参数 |
-B |
输出满足条件行的前几行,比如 grep -B 3 "aa" file 表示在 file 中输出有 aa 的行,同时还要输出 aa 的前 3 行 |
-A |
这个与-B 类似,输出满足条件行的后几行 |
-C |
这个相当于同时用-B -A,也就是前后都输出 |
例子
显示包含#的行,并在前面添加行数
grep -n '#' /etc/ssh/sshd_config
显示包含#的行,并关闭大小写敏感性
grep -i '#' /etc/ssh/sshd_config
显示sshd配置文件,排除空行和以#号开头的
cat /etc/ssh/sshd_config |grep -v '^$' |grep -v '^#'
显示包含s内容的所有文件名
grep -l 's' /etc/ssh/*
统计包含有#的行数
grep -c '#' /etc/ssh/sshd_config
只显示包含Port词的行
grep -w 'Port' /etc/ssh/sshd_config