grep - 运维三剑客

简介

  • 主要用于匹配字符串
  • 示例:grep [option]... [file]...

参数介绍

-i:忽略大小写匹配

点击查看代码
[root@master ~]# cat a
000-AAA
000-aaa

[root@master ~]# grep aaa a
000-aaa

# 忽略大小写后,能匹配000-AAA
[root@master ~]# grep -i aaa a
000-AAA
000-aaa

-w:整词匹配

点击查看代码
[root@master ~]# cat a
000-AAA
000-aaa

[root@master ~]# grep -w aaa a
000-aaa

# 设置正词匹配后,aa作为一个整体,无法匹配到aaa
[root@master ~]# grep -w aa a

-v:反选

点击查看代码
[root@master ~]# cat a
000-AAA
000-AAA
000-aaa

# 匹配到aaa后,结果取反
[root@master ~]# grep -v aaa a
000-AAA
000-AAA

-c:显示匹配到的行的数量

-n:显示匹配到的行号和行内容

点击查看代码
[root@master ~]# cat a
000-AAA
000-aaa
000-AAA
000-AAA

# 一共有3行内容包含AAA
[root@master ~]# grep -c AAA a
3

# 包含行号和内容
[root@master ~]# grep -n AAA a
1:000-AAA
3:000-AAA
4:000-AAA

-r:递归匹配

-l:显示目录名

--exclude=:按条件排除结果

使用通配符
只匹配文件名,不是按结果进行整体匹配

点击查看代码
# 在当前目录下创建文件x
# 并且创建子目录a1,将文件x复制到子目录a1中,重命名为x1
[root@master a]# cat x
a
bb
ccc

# 直接递归查询,会得到文件和行内容
[root@master a]# grep -r ccc ./
./a1/x1:a2ccc
./x:ccc

# 只希望得到文件名
[root@master a]# grep -r ccc -l ./
./a1/x1
./x

# 排除符合条件的文件
[root@master a]# grep -r ccc -l ./ --exclude "*1"
./x

-A n:匹配行+后边n行

-B n:匹配行+前边n行

-C n:匹配行+前后n行

点击查看代码
[root@master ~]# cat a
000-a
000-b
000-c
000-d
000-e

# 匹配行+后2行
[root@master ~]# grep c -A 2 a
000-c
000-d
000-e

# 匹配行+前2行
[root@master ~]# grep c -B 2 a
000-a
000-b
000-c

# 匹配行+前后1行
[root@master ~]# grep c -C 1 a
000-b
000-c
000-d

# 匹配行+前后+显示行号,结果显示会有差别
# 匹配行是:行号:行内容
# 前后行是:行号-行内容
[root@master ~]# grep c -C 1 -n a
2-000-b
3:000-c
4-000-d

-E:正则

-o:显示匹配内容,实际使用上主要是为了正则的模糊匹配,因为完全匹配结果没啥意义

点击查看代码
[root@master ~]# cat a
x-abc-x
y..aaae
tim
tom

# 使用正则匹配"t.m"的
[root@master ~]# grep -E 't.m' a
tim
tom

# 正则表达式中只匹配a前后一个字符,所以-o输出也是a前后一个字符
[root@master ~]# grep -E '.a.' -o a
-ab
.aa
posted @ 2024-06-13 10:24  难德糊涂  阅读(36)  评论(0)    收藏  举报