1.简介
Linux系统中grep命令是一种强大的文本搜索、查找过滤工具,,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep使用格式:grep [选项] [模式] [文件…],它在一个或多个文件中搜索满足模式的文本行。
grep家族共有三个:grep、egrep、fgrep
- grep中字符的匹配位置设定
^ 关键字
关键字 $
<关键字
关键字>
<关键字>\
注意:正规的 grep 不支持扩展的正则表达式 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别,加上反斜杠,这个字符就被翻译成扩展正则表达式,就像egrep 命令等同于‘grep -E
2.常用参数
参数 | 功能 |
-c | 只输出匹配行的计数。 |
-i | 不区分大小写(只适用于单字符)。 |
-h | 查询多文件时不显示文件名。 |
-l | 查询多文件时只输出包含匹配字符的文件名。 |
-n | 显示匹配行及行号。 |
-s | 不显示不存在或无匹配文本的错误信息。 |
-v | 显示不包含匹配文本的所有行。 |
-E | 开启拓展的正则表达式 |
3.用法演示
准备工作:将/etc/passwd拷贝到/mnt下,我们以这个文件为例,文件内容大致如下:
- 找出/mnt/passwd中包含root的行
grep root passwd
- 忽略大小写
grep -i root passwd
- 关键字左边不能有其他字符(不包含特殊字符)
grep "\<root" passwd
- 关键字右边不能有其他(不包含特殊字符)
grep "root\>" passwd
- 关键字左右不能有其他(不包含特殊字符)
grep "\<root\>" passwd
- ^关键字 ——>以关键字开头
- 关键字$ ——>以关键字结尾
grep -E "^root\>|\<root$" passwd ##因为有 | ,需要扩展-E(extend)
egrep "^root\>|\<root$" passwd ##两条命令含义相同——过滤以root开头或者结尾的行
- -v 反向过滤,不包含的所有
grep -E "^root\>|\<root$" passwd -v
grep -E "^root\>|\<root$" passwd -v | grep root
grep -E "^root\>|\<root$" passwd -v | grep "\<root\>"
4.grep 中字符的匹配次数设定
* 字符出现 [0- 任意次 ]
? 字符出现 [0-1 次 ]
+ 字符出现 [1- 任意次 ]
{n} 字符出现 [n 次 ]
{m,n} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
{0,n} 字符出现 [0-n 次 ]
{m,} 字符出现 [ 至少 m 次 ]
(xy){n} xy关键字出现 [n 次 ]
.* 关键字之间匹配任意字符
{}大括号内的内容属于哪一个程序
()括号内属于一个整体