grep 与条件_shell三剑客之grep!

背景

对于很多的测试人员来说,grep命令都很熟悉,用的最多的比如去查找指定的进程:ps -ef | grep *** 

其中***为进程名或进程号,这里我们只用到的grep的最基础功能-从标准输出中过滤指定的字符串,实际上grep的功能远不止如此。

这篇文章给大家来介绍下grep的进阶及高阶用法,来帮助我们在测试工作中提升效率。

grep的全称:Global search Regular Expression and Print out the line。

是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。

grep和sed、awk一起成为Linux中的三剑客。

grep可以不使用正则,但是跟正则一起配合使用时,功能最为强大!

命令语法

grep提供两种方式:

◆ grep [option] [pattern] testfile

◆ stdout | grep [option] [pattern]

ecea8cb7557b140aa362502eb1818f3b.png

第一种是从文本中直接使用pattern匹配搜索

第二种是从标准输出中处理 grep所提供的option(参数选项)

403d8be095f294ca31cecf90853d8aec.png

我们先从第一个最简单的示例开始:先准备一个测试文件。

内容如下:

fe85b038c34aca39a7bb6ad4ce7c5e3e.png

从文本文件中搜索test字符串

a296cefee5e25b91bbd95613680bad69.png

可以看到包含有"test"的行被打印出来,默认grep是区分大小写的。

所以"Test","TEST"没有被匹配出来。

如果想要不区分大小写,我们可以加"-i"的参数。

如下:

bd4efd6f56bf78df01ade510d592c549.png

当前我们的测试文本内容比较少,我们肉眼可以见到是在第几行。

如果文本行数较多的情况下那就不太方便了,这里就可以用到"-n"的参数

16bac9233856994ecef7996f32cc923b.png

包含有"test"的并且不区分大小写的行在开头会显示行号,现在的结果中匹配的关键字所在行全部内容都会输出。

如果只想要看到匹配的关键字,怎么办?

使用"-o"参数即可

5248bc98ea008be8429045afbd4327f1.png

有时候我们需要对整个目录去搜索关键字,如果直接使用grep "test" 目录名,会报错。

加参数'-r'就可以避免这个问题

0a99afdd2e58f211dbeea7921361efdc.png

可以看到shellTest目录下的两支文件test1.txt以及testfile都包含test被打印出来了

“-q”选项表示使用静默模式,在此模式下grep命令不会有任何的打印结果,无论是否有匹配到。

一般来说我们可以根据echo $? 

来查看上一条指令(grep)的执行结果,如果返回结果为0,表示grep有匹配到了,如果返回结果为1,表示grep没有匹配到。

750f20d86eecccf8071a58c0c9f4905f.png

一般我们可以shell脚本中去用if条件分支进行判断,如果echo $?结果为0,就去执行相应的操作

grep结合pattern正则

前面我们介绍了参数的基本用法,grep的强大之处其实是和正则表达式一起才有作用。

注:本篇文章不会具体介绍正则表达式的使用,如果不了解正则表达式的同学推荐去看下之前相关的文章

我们知道在正则表达式中分为了两类:

01 基本正则表达式

◆ . 单个字符

◆ * 表示前面的字符连续出现任意次,包括0次

◆ ^ 表示锚定行首

◆ $ 表示锚定行尾

◆ [a-z] [0-9] 区间范围......

02 扩展正则表达式

◆ ?表示匹配其前面的字符0或1次

◆ + 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。

◆ () 分组

◆ {} 连续匹配

◆ | 匹配多个表达式的任何一个......

如查询以"lemon"单词开头

8e7a9f6c63fe13a6cfa6e7794c5b6330.png

查找文件中空白行的数量

0edc2e369f4cdc66bd99731a71a19413.png

正则“^$”表示空白行,参数“-c”表达计算行数

连续字数的正则匹配,如:查找“appium”,p是连续的

98e2f31990cfae3bb4ec3a6e4cd1d7d6.png

“{2}”表示p连续出现了两次,可以发现结果是匹配不到的。

因为{}是扩展正则表达式,grep默认是基本正则表达式,如果需要支持扩展正则表达式,我们需要加"-E"选项:

2b66403fa2de4fed984869599470c152.png

本文由柠檬班歪歪原创,转载需注明出处!

5d560b961fe7a27f56849c9643f9cb90.png

转发到朋友圈是最高的赞赏

关注柠檬班微信公众号,获取最新技术文章

让软件测试学习变得更简单!

27310c26ca12ae4f2109fc0cc8773596.gif

Shell脚本如何备份数据库?

想知道答案吗?

扫码即可获的解题视频

562bec969a6b886ff706711a96d10c88.png

1d51ea16f68d8853115a2b7ff28b1d61.png

一言不合就给我在看

8973921747fd676127adcbe3ac4871ee.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值