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]
语法格式 | 解释 |
---|---|
option | 参数选项 |
pattern | 为查找的字符串或者正则表达式 |
第一种是从文本中直接使用pattern匹配搜索
第二种是从标准输出中处理
grep所提供的option(参数选项)
参数选项 | 含义 |
---|---|
-i | 搜索时忽略大小写 |
-n | 显示行号 |
-o | 只显示被匹配的关键字,不会打印匹配的整行内容 |
-r | 递归搜索 |
-v | 不显示匹配行信息 |
-q | 静默模式,不输出任何信息,在shell脚本中,可以通过echo $?查看是否匹配到,0表示匹配到,1表示没有匹配到 |
-E | 使用扩展正则表达式 |
我们先从第一个最简单的示例开始:
先准备一个测试文件,内容如下:
hhy@hhy-virtual-machine:~/shellTest$ cat testfile
hello lemonban
test
tomcat Test jenkins
lemon apache test
selenium appium httpclient
java python
TEST
从文本文件中搜索test字符串
hhy@hhy-virtual-machine:~/shellTest$ grep "test" testfile
test
lemon apache test
可以看到包含有"test"的行被打印出来,默认grep是区分大小写的,所以"Test","TEST"没有被匹配出来
如果想要不区分大小写,我们可以加"-i"的参数,如下
hhy@hhy-virtual-machine:~/shellTest$ grep -i "test" testfile
test
tomcat Test jenkins
lemon apache test
TEST
当前我们的测试文本内容比较少,我们肉眼可以见到是在第几行。如果文本行数较多的情况下那就不太方便了,这里就可以用到"-n"的参数
hhy@hhy-virtual-machine:~/shellTest$ grep -i -n "test" testfile
2:test
3:tomcat Test jenkins
4:lemon apache test
7:TEST
包含有"test"的并且不区分大小写的行在开头会显示行号
现在的结果中匹配的关键字所在行全部内容都会输出,如果只想要看到匹配的关键字,怎么办?
使用"-o"参数即可
hhy@hhy-virtual-machine:~/shellTest$ grep -i -n -o "test" testfile
2:test
3:Test
4:test
7:TEST
有时候我们需要对整个目录去搜索关键字,如果直接使用grep "test" 目录名,会报错
加参数'-r'就可以避免这个问题
hhy@hhy-virtual-machine:~$ grep "test" shellTest
grep: shellTest: Is a directory
hhy@hhy-virtual-machine:~$ grep -r "test" shellTest
shellTest/test1.txt:test 1111 aaaaa
shellTest/testfile:test
shellTest/testfile:lemon apache test
可以看到shellTest目录下的两支文件test1.txt以及testfile都包含test被打印出来了
“-q”选项表示使用静默模式,在此模式下grep命令不会有任何的打印结果,无论是否有匹配到。一般来说我们可以根据echo $? 来查看上一条指令(grep)的执行结果,如果返回结果为0,表示grep有匹配到了,如果返回结果为1,表示grep没有匹配到
hhy@hhy-virtual-machine:~/shellTest$ grep "test" testfile
test
lemon apache test
hhy@hhy-virtual-machine:~/shellTest$ grep -q "test" testfile
hhy@hhy-virtual-machine:~/shellTest$ echo $?
0
一般我们可以shell脚本中去用if条件分支进行判断,如果echo $?结果为0,就去执行相应的操作
grep结合pattern正则
前面我们介绍了参数的基本用法,grep的强大之处其实是和正则表达式一起才有作用。
注:本篇文章不会具体介绍正则表达式的使用,如果不了解正则表达式的同学推荐去看下之前相关的文章
我们知道在正则表达式中分为了两类:
基本正则表达式
. 单个字符
* 表示前面的字符连续出现任意次,包括0次
^ 表示锚定行首
$ 表示锚定行尾
[a-z] [0-9] 区间范围
......
扩展正则表达式
? 表示匹配其前面的字符0或1次
+ 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
() 分组
{} 连续匹配
| 匹配多个表达式的任何一个
......
如查询以"lemon"单词开头
hhy@hhy-virtual-machine:~/shellTest$ grep "^lemon" testfile
lemon apache test
查找文件中空白行的数量
hhy@hhy-virtual-machine:~/shellTest$ grep -c "^$" testfile
2
正则“^$”表示空白行,参数“-c”表达计算行数
连续字数的正则匹配,如:查找“appium”,p是连续的
hhy@hhy-virtual-machine:~/shellTest$ grep "ap{2}ium" testfile
“{2}”表示p连续出现了两次,可以发现结果是匹配不到的
因为{}是扩展正则表达式,grep默认是基本正则表达式,如果需要支持扩展正则表达式,我们需要加"-E"选项:
hhy@hhy-virtual-machine:~/shellTest$ grep -E "ap{2}ium" testfile
selenium appium httpclient
shell三剑客之grep的更多相关文章
- shell 三剑客之 grep
grep 的全称是 Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹 ...
- Linux进阶之正则,shell三剑客(grep,awk,sed),cut,sort,uniq
一.正则表达式:Regular Expression 正则表达式:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式 ...
- Shell—三剑客(grep、sed、awk)
grep命令详解 文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行. 命令格式:grep [options] pattern filename.gr ...
- shell 文本处理三剑客之 grep 和 egrep
shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...
- shell脚本三剑客:grep、sed、awk
shell脚本三剑客:grep sed awk grep语法: grep [OPTIONS] PATTERN [FILE] 常用选项 -c 统计匹配到的 ...
- linux三剑客之grep
linux基础三剑客之grep 1.grep命令 基本介绍 grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep. grep英文名:Global sea ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- Linux文本处理三剑客之——grep
一Linux文本处理三剑客之——grep Linux文本处理三剑客都支持正则表达式 grep :文本过滤( 模式:pattern) 工具,包括grep, egrep, fgrep (不支持正则表达式) ...
- (转)不看绝对后悔的Linux三剑客之grep实战精讲
不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...
随机推荐
- 微服务架构 ------ 插曲 linux LVM磁盘扩容
1.LVM的基本概念 物理卷(PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件,物理卷包括一个特殊的header,其余部分被切割成一块块物理区域. 卷组(VG):将一组物 ...
- 如何在Mac下配置多个Java版本
使用工具:brew cask brew cask是一个用命令行管理Mac下应用的工具,提供了自动安装和卸载功能,能够自动从官网上下载并安装 最新的版本,它是基于homebrew的一个增强工具. 一. ...
- msgTips 顶部弹窗
最近发现好多网站都采用顶部弹窗,并且不用用户手动去点击确定.感觉这样很方便用户,所以也找了好多大神的代码,整理一下方便以后查找 前端: @{ Layout = null; } <!DOCTYPE ...
- javascript之DOM选择符
javascript库中最常用的一项功能,就是根据CSS选择符选择与某个模式匹配的DOM元素.实际上jQuery的核心就是通过css选择符查询DOM文档取得元素的引用,从而抛开了getElementB ...
- maven仓库报错 sqljdbc4、ojdbc6、tomcat-jdbc-8.5.14
报错:Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0 和 Missing artifact com.microsoft.sqlserver: ...
- 【HTTP】HTTP协议的请求与响应
创建时间:6.14 http协议 的位置 1.HTTP是什么 超文本传输协议(HyperText Transfer Protocol) 2.Http协议的组成 Http协议由Http请求和Http响应 ...
- Docker安装Redis4.0
docker pull redis:4.0 拉取Redis4.0镜像 docker images 查看本地的镜像 mkdir -p /root/redis4.0/data 在宿主机创建数据文件目录 w ...
- MMORPG服务器场景中的aoi算法思考
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lwtbn1/article/details/37961695 最近在做一个移动平台上的MMORPG项 ...
- String s = new String("xyz");创建了几个String Object?并作说明。
String s = new String("xyz");创建了几个String Object?并作说明. 共产生了两个2个对象,第一个是字符串常量xyz,存储于常量池中.第二个对 ...
- opencart忘记登录密码怎么办
今天一位客户问opencart忘记登录密码怎么办,他们公司内部有几位员工同时在管理,可能是哪位同事把密码给改了没有跟大家说,现在都登录不了.这个只能数据库修改了.进入opencart的数据库,找到oc ...