Linux三剑客之grep简介
grep,sed和awk被称之为linux三剑客,后面两个在文章中都写过一些,今天先简单写写grep这个命令。
grep是一个强大的文本过滤命令,它可以将符合规范的一些文本过滤出来,经常备用在文本处理的场景。
下面我们简单说说grep这个命令的一些常用参数和用法:
1、没有参数
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
aaaaaaa
ddddddd
[root dba_mysql]# cat yeyz.sh|grep abcd
abcdefg
abcd
没有参数的时候,grep命令将yeyz.sh中包含abcd的行给过滤出来。
2.-A参数(after)和-B参数(before)和-C参数(content)
这三个参数可以打印出来符合规范的行前后的若干行,使用方法如下:
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
aaaaaaa
ddddddd
[root dba_mysql]# cat yeyz.sh|grep abcd
abcdefg
abcd
包含abcd的行后面一行
[root dba_mysql]# cat yeyz.sh|grep -A1 abcd
abcdefg
abcd
aaaaaaa
包含abcd的行后面两行
[root dba_mysql]# cat yeyz.sh|grep -A2 abcd
abcdefg
abcd
aaaaaaa
ddddddd
包含aaa的行前面一行
[root dba_mysql]# cat yeyz.sh|grep -B1 aaa
abcd
aaaaaaa
包含aaa的行前面两行
[root dba_mysql]# cat yeyz.sh|grep -B2 aaa
abcdefg
abcd
aaaaaaa
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
aaaaaaa
ddddddd
[root dba_mysql]# cat yeyz.sh|grep -C1 aaa
abcd
aaaaaaa
ddddddd
可以看到-A参数负责打印后面若干行,-B参数负责前面,-C参数负责前后都打印。
3.-c参数 (count)
计算符合规则的行数,本例中是包含abcd的行的行数
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
aaaaaaa
ddddddd
[root dba_mysql]# cat yeyz.sh|grep -c abcd
4.-h和-H参数
控制是否显示文件名称,如下:
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
aaaaaaa
ddddddd
[root dba_mysql]# grep -H aaa yeyz.sh
yeyz.sh:aaaaaaa
[root dba_mysql]# grep -h aaa yeyz.sh
aaaaaaa
5.-i参数
控制是否忽略大小写,如下所示:
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
AbC
aaaaaaa
ddddddd
大小写不敏感
[root dba_mysql]# cat yeyz.sh | grep -i 'abc'
abcdefg
abcd
AbC
大小写敏感
[root dba_mysql]# cat yeyz.sh | grep 'abc'
abcdefg
abcd
6.-n参数
控制是否显示行号,操作如下:
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
AbC
aaaaaaa
ddddddd
是否显示行号
[root dba_mysql]# cat yeyz.sh | grep -n 'AbC'
:AbC
[root dba_mysql]# cat yeyz.sh | grep 'AbC'
AbC
7.-v参数
反向匹配不包含的列,操作如下:
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
AbC
aaaaaaa
ddddddd
反向匹配,不包含AbC的列
[root dba_mysql]# cat yeyz.sh | grep -v 'AbC'
abcdefg
abcd
aaaaaaa
ddddddd
8.-x参数
只匹配完全相同的行,注意,空格不一致都不行!
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
AbC
aaaaaaa
ddddddd
只匹配完全相同的列
[root dba_mysql]# cat yeyz.sh | grep -x 'AbC'
[root dba_mysql]# cat yeyz.sh | grep -x 'AbC 678'
[root dba_mysql]# cat yeyz.sh | grep -x 'AbC 678'
[root dba_mysql]# cat yeyz.sh | grep -x 'AbC 678'
AbC
9.-o参数和-w参数
-o参数只显示我们想要的那一部分,-w参数只显示完全匹配我们过滤条件的部分。
[root dba_mysql]# cat yeyz.sh
abcdefg
abcd
AbC
aaaaaaa
ddddddd
-o参数只显示匹配的值
[root@tk-dba-mysql-stat-10-104 dba_mysql]# cat yeyz.sh | grep -o 'abcd'
abcd
abcd
-w参数只显示完全匹配过滤条件的行,虽然第一行中包含abcd,但是后面还有efg,所以没有出现在结果集里面
[root@tk-dba-mysql-stat-10-104 dba_mysql]# cat yeyz.sh | grep -w 'abcd'
abcd
总结:
grep命令的用途不仅仅是这些参数之间的变化,该命令搭配正则表达式可以实现很多"神奇的"功能,后续我们会持续更新。敬请期待。