Linux三剑客之grep简介

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命令的用途不仅仅是这些参数之间的变化,该命令搭配正则表达式可以实现很多"神奇的"功能,后续我们会持续更新。敬请期待。

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码客

Shell字符串处理

先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果,如果结果不为空,说明str1包含str2。如果结果为空,说明不包含。...

17220
来自专栏SAMshare

图文并茂地带你入门正则表达式

对于大多数没有接受过正式 CS 教育的人来说,正则表达式似乎只有最核心的 Unix 程序员才敢碰。一个好的正则表达式看起来像魔法,但请记住:任何足够先进的技术都...

4610
来自专栏二狗的DBA之路

使用 redis-shake 迁移 redis-cluster集群

    IDC上云, 有2套redis-cluster需要迁移到云上。 这里我们使用 redis-shake 来做迁移操作。

11620
来自专栏Seebug漏洞平台

RoarCTF2019 Writeup

volatility -f mem.raw pslist --profile=Win7SP1x86

12980
来自专栏运维一切

查看,修改ceph节点的ceph配置命令

该命令要求必须在 osd.1 , mon.node1节点上才能执行 这三种方法显示结果都是一样的,不过第三种方法的显示格式和一二种不同而已。

9820
来自专栏青笔原创

linux 查看系统信息和运行状态实用命令汇总

本文所有 shell 命令均在阿里云ECS服务器上测试过,以确保每行代码都是百分百可用的。测试使用的服务器配置信息如下:

10210
来自专栏郭耀华‘s Blog

linux基础

awk "NR>19&&NR<31" num.txt 行数大于19并且小于31

5700
来自专栏陶士涵的菜地

[视频教程] 基于redis的消息队列实现与思考

使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它。在公司项目中正好有个场景使用到了消息队列,因此就来说...

6620
来自专栏CU技术社区

Shell 的18条常用命令整理

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示一般文件名外,连隐藏文件也会显示出来。

3410
来自专栏郭耀华‘s Blog

grep、sed、awk练习题

文件:datafile Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/5...

6720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励