您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

shell三剑客之grep

时间:2019-09-29 10:46:56  来源:  作者:

一、背景

对于很多的测试人员来说,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]

shell三剑客之grep

 

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

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

shell三剑客之grep

 

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

内容如下:

shell三剑客之grep

 

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

shell三剑客之grep

 

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

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

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

如下:

shell三剑客之grep

 

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

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

shell三剑客之grep

 

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

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

使用"-o"参数即可

shell三剑客之grep

 

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

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

shell三剑客之grep

 

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

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

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

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

shell三剑客之grep

 

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

三、grep结合pattern正则

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

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

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

01%20基本正则表达式

◆%20.%20单个字符

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

◆%20^%20表示锚定行首

◆%20$%20表示锚定行尾

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

......

02%20扩展正则表达式

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

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

◆%20()%20分组

◆%20{}%20连续匹配

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

......

如查询以"lemon"单词开头

 

查找文件中空白行的数量

shell三剑客之grep

 

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

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

shell三剑客之grep

 

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

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

 

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



Tags:shell grep   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、背景对于很多的测试人员来说,grep命令都很熟悉,用的最多的比如去查找指定的进程:ps -ef | grep ***其中***为进程名或进程号,这里我们只用到的grep的最基础功能-从标准输出...【详细内容】
2019-09-29  Tags: shell grep  点击:(135)  评论:(0)  加入收藏
▌简易百科推荐
以京训钉开发平台接口文档为例,使用HttpClient类请求调用其接口,对数据进行增删改查等操作。 文档地址: https://www.yuque.com/bjjnts/jxd/bo1oszusing System;using System.C...【详细内容】
2021-12-28  Wednes    Tags:HttpClient   点击:(1)  评论:(0)  加入收藏
阿里云与爱快路由安装组网教程一、开通好阿里云轻量服务器之后在服务器运维-远程连接处进行远程 二、进入控制台后在root权限下根据需要安装的固件位数复制下面命令。32位:wg...【详细内容】
2021-12-28  ikuai    Tags:组网   点击:(1)  评论:(0)  加入收藏
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  程序员蛋蛋    Tags:HTTP 报文   点击:(5)  评论:(0)  加入收藏
一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率...【详细内容】
2021-12-27  码农世界    Tags:网络   点击:(3)  评论:(0)  加入收藏
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  憨猪哥08    Tags:TCP/IP   点击:(35)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  DifferentJava    Tags:TCP   点击:(10)  评论:(0)  加入收藏
你好,这里是科技前哨。 随着“元宇宙”概念的爆火,下一代互联网即将到来,也成了互联网前沿热议的话题,12月9日美国众议院的听证会上,共和党议员Patrick McHenry甚至宣称,要调整现...【详细内容】
2021-12-17  王煜全    Tags:Web3   点击:(14)  评论:(0)  加入收藏
一、demopublic static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3);...【详细内容】
2021-12-15  程序员阿龙    Tags:Curator   点击:(22)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  一口Linux    Tags:网络知识   点击:(31)  评论:(0)  加入收藏
无论是在外面还是在家里,许多人都习惯了用手机连接 WiFi 进行上网。不知道大家有没有遇到过这样一种情况, 明明已经显示成功连接 WiFi,却仍然提示“网络不可用”或“不可上网”...【详细内容】
2021-12-14  UGREEN绿联    Tags:WiFi   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条