一、背景
对于很多的测试人员来说,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]
文章插图
第一种是从文本中直接使用pattern匹配搜索
第二种是从标准输出中处理 grep所提供的option(参数选项)
文章插图
我们先从第一个最简单的示例开始:先准备一个测试文件 。
内容如下:
文章插图
从文本文件中搜索test字符串
文章插图
可以看到包含有"test"的行被打印出来,默认grep是区分大小写的 。
【shell三剑客之grep】所以"Test","TEST"没有被匹配出来 。
如果想要不区分大小写,我们可以加"-i"的参数 。
如下:
文章插图
当前我们的测试文本内容比较少,我们肉眼可以见到是在第几行 。
如果文本行数较多的情况下那就不太方便了,这里就可以用到"-n"的参数
文章插图
包含有"test"的并且不区分大小写的行在开头会显示行号,现在的结果中匹配的关键字所在行全部内容都会输出 。
如果只想要看到匹配的关键字,怎么办?
使用"-o"参数即可
文章插图
有时候我们需要对整个目录去搜索关键字,如果直接使用grep "test" 目录名,会报错 。
加参数'-r'就可以避免这个问题
文章插图
可以看到shellTest目录下的两支文件test1.txt以及testfile都包含test被打印出来了
“-q”选项表示使用静默模式,在此模式下grep命令不会有任何的打印结果,无论是否有匹配到 。
一般来说我们可以根据echo $?
来查看上一条指令(grep)的执行结果,如果返回结果为0,表示grep有匹配到了,如果返回结果为1,表示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"单词开头
文章插图
查找文件中空白行的数量
推荐阅读
- 吸奶器吸奶前要弄干水吗 吸奶器洗了之后有水能马上吸奶吗
- MacOS升级之后 IntelliJ 中 Git 突然不能用的问题
- Android数据结构之SparseArray
- 埋线减肥瘦腿吗
- 春夏之交肝火盛 绿茶春茶是首选
- 苏轼马子约送茶 作六言谢之咏茶的诗赋鉴析
- 幼儿早教三字经人之初 人之初性本善全文朗诵
- 抱卵的螃蟹好吃吗,螃蟹抱卵之后多久孵化
- 正确制作绿茶 欣赏茶汤沉浮之美
- 凤凰 单丛 单丛的名贵名酒之 甜蜜之歌