软件测试学习笔记丨Linux三剑客-grep

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32506

一、简介

1.1 grep命令

  • grep是一个全局查找正则表达式,并且打印结果行的命令。
  • grep的输入是一个文件或者一个标准输入(stdin),或者是一个“-”连字符,输出一般是打印在屏幕上。
  • grep家族还有egrep和fgrep这两个命令。

1.2 工作原理

  • grep命令在一个或多个文件中,查找某个字符模式。
  • 如果这个模式中包含空格,就必须用引号把它括起来。
  • grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词,位于模式之后所有的单词都被视为文件名。
  • grep将输出发送到屏幕,不会对输入文件进行任何修改或变化。
  • 命令格式:grep [选项] 模式 [文件....]

示例:

注:ps命令的输出被送到grep,然后所有包含root的行,都被打印出来。

二、内容检索

  • 获取行:grep pattern file
  • 获取内容:grep -o pattern file
  • 获取上下文:grep -A -B -C pattern file

三、文件检索

  • 递归搜索:grep pattern -r dir
  • 展示匹配文件名:grep -H 111 /tmp/1
  • 只展示匹配文件名:grep -l 111 /tmp/1

四、范围约束

  • 忽略大小写:grep -i pattern file
  • 不显示匹配的行:grep -v pattern file
  • 使用扩展正则表达式:grep -E pattern file
  • 文件范围和目录范围约束:grep 111 -r /tmp/demo/ --include "11*"

五、进程检索

  • 进程过滤场景比较特殊,需要注意:因为grep本身会开启新进程,所以需要单独过滤掉grep进程。

六、基本正则表达式(BRE)和扩展正则表达式(ERE)

  • grep命令支持两种常见的正则表达式语法,默认情况下使用基本正则表达式,而使用grep -Eegrep则启用扩展正则表达式。

6.1 基本正则表达式(Basic Regular Expression)

元字符含义
.匹配除换行符以外的任何单个字符。
.匹配一个实际的点字符。
^锚定到字符串的开始位置。
$锚定到字符串的结束位置。
*前面的字符匹配零次或多次。
+前面的字符匹配一次或多次。
{n}前面的字符恰好匹配 n 次。
{n,}前面的字符至少匹配 n 次。
{,m}前面的字符最多匹配 m 次。
{n,m}前面的字符至少匹配 n 次,最多匹配 m 次。
?前面的字符匹配零次或一次。
{匹配实际的大括号字符。
(匹配实际的左圆括号字符。
)匹配实际的右圆括号字符。
\转义下一个字符,或者表示一个八进制数。
[]字符集合,匹配其中的任意一个字符。
[^]排除字符集合,匹配不在括号内的任意一个字符。
[0-9]匹配数字字符。
[^0-9]匹配非数字字符。
[ \t\n\r\f\v]匹配空白字符。
[^ \t\n\r\f\v]匹配非空白字符。
[a-zA-Z0-9_]匹配单词字符。
[^a-zA-Z0-9_]匹配非单词字符。

6.2 扩展正则表达式(Extended Regular Expression)

元字符含义
.匹配除换行符以外的任何单个字符。
^锚定到字符串的开始位置。
$锚定到字符串的结束位置。
*前面的字符匹配零次或多次。
+前面的字符匹配一次或多次。
{n}前面的字符恰好匹配 n 次。
{n,}前面的字符至少匹配 n 次。
{,m}前面的字符最多匹配 m 次。
{n,m}前面的字符至少匹配 n 次,最多匹配 m 次。
?前面的字符匹配零次或一次。
()分组,允许将多个字符或表达式组合。
{匹配实际的大括号字符。
(匹配实际的左圆括号字符。
)匹配实际的右圆括号字符。
\转义下一个字符,或者表示一个八进制数。
[]字符集合,匹配其中的任意一个字符。
[^]排除字符集合,匹配不在括号内的任意一个字符。
(…)匹配括号内的子表达式,并且括号内的表达式可以作为一个整体进行重复。
[0-9]匹配数字字符。
[^0-9]匹配非数字字符。
[ \t\n\r\f\v]匹配空白字符。
[^ \t\n\r\f\v]匹配非空白字符。
[a-zA-Z0-9_]匹配单词字符。
[^a-zA-Z0-9_]匹配非单词字符。

6.3 区别

  • 在基本正则表达式中,像+?|等符号,需要通过``转义来使用;
  • 在扩展正则表达式中,+?|()等符号可以直接使用,无需转义。

1. 匹配多个字符的次数:+ +

  • 基本正则表达式 (BRE)+ 在 BRE 中并不代表“一个或多个”的含义。如果你想匹配前面的字符一个或多个,需要使用 + 来转义。示例:

    • 命令: echo "greeep" | grep "e+"
    • 结果: 匹配成功,因为 + 在 BRE 中表示“匹配一个或多个 e”。如果不转义 +
    • 命令: echo "greeep" | grep "e+"
    • 结果: 不匹配,因为在 BRE 中,+ 被视为普通字符。
  • 扩展正则表达式 (ERE)+ 直接表示“一个或多个”,无需转义。示例:

    • 命令: echo "greeep" | grep -E "e+"
    • 结果: 匹配成功,因为 ERE 中 + 直接表示匹配一个或多个 e

2. 选择符号:| |

  • 基本正则表达式 (BRE)| 在 BRE 中也没有特殊意义。如果你想在 BRE 中使用“或”的语义,必须写成 |。示例:

    • 命令: echo "grep or egrep" | grep "grep|egrep"
    • 结果: 匹配成功,因为 | 在 BRE 中表示选择操作符(“或”)。
  • 扩展正则表达式 (ERE)| 直接表示“或”,无需转义。示例:

    • 命令: echo "grep or egrep" | grep -E "grep|egrep"
    • 结果: 匹配成功,| 在 ERE 中代表“或”操作。

3. 匹配字符次数范围:{n,m} {n,m}

  • 基本正则表达式 (BRE){n,m} 需要转义为 {n,m} 才能表示匹配前面的字符至少 n 次,最多 m 次。示例:

    • 命令: echo "abc" | grep "a{1,2}"
    • 结果: 匹配成功,因为 a 出现一次,{1,2} 表示匹配 a 一次或两次。
  • 扩展正则表达式 (ERE){n,m} 在 ERE 中可以直接使用,无需转义。示例:

    • 命令: echo "abc" | grep -E "a{1,2}"
    • 结果: 同样匹配成功。

4. 分组:() ()

  • 基本正则表达式 (BRE) : 在 BRE 中,如果你想要分组表达式,需要使用 ()。示例:

    • 命令: echo "grep123" | grep "(grep)[0-9]"
    • 结果: 匹配成功,(...) 用来捕获分组,后面可以是数字。
  • 扩展正则表达式 (ERE) : 在 ERE 中,() 直接表示分组,无需转义。示例:

    • 命令: echo "grep123" | grep -E "(grep)[0-9]"
    • 结果: 同样匹配成功。

七、grep常用选项

选项说明
-i忽略大小写进行匹配。
-v只显示不匹配模式的行(反向匹配)。
-r/-R递归搜索目录中的文件。
-n显示匹配行的行号。
-H在输出匹配行时显示文件名。
-l只显示包含匹配模式的文件名,不显示匹配的行。
-c显示匹配到模式的行数。
-A显示匹配行后面的 n 行。
-B显示匹配行前面的 n 行。
-C显示匹配行的前后 n 行。
-E使用扩展正则表达式进行匹配。
-F将模式作为固定字符串进行匹配,而不是正则表达式。
-P使用 Perl 正则表达式进行匹配。
-q静默模式,不输出匹配结果,只返回退出状态码。
-w只匹配整个单词。
-x只匹配整行。
–color为匹配的部分加上颜色。

八、grep实际运用

  • grep是一个非常实用的工具,用于快速过滤、查找和分析日志文件、代码库和输出结果。

8.1 日志文件分析

  • grep可以快速定位错误、警告或特定的输出。

    • INFO:表示信息性日志,通常用于记录程序的正常运行状态。
    • WARN:警告信息,表示有潜在问题但不会立即导致程序中断。
    • ERROR:错误日志,表示程序在运行过程中遇到了问题。
    • DEBUG:调试信息,用于记录系统内部的运行状态,通常用于开发或调试阶段。
  • 查找错误信息grep -i "error" log.txt

  • 查找多个错误或警告grep -E "error|warn" log.txt

  • 显示错误前后几行上下文grep -A 3 -B 3 -i "error" log.txt

8.2 代码库中的模式查找

  • grep 可以帮助快速查找源代码中的函数、变量或注释,特别是当需要定位大规模代码库中特定的模式时。
  • 查找函数定义grep -r "def my_function" .
  • 查找特定关键字的注释grep -r "// TODO" .
  • 查找特定的变量声明grep -r "int my_variable" src/

8.3 测试结果中的关键输出检查

  • grep 可以用来过滤测试输出,检查测试是否通过、失败或抛出异常。
  • 检查测试结果grep -i "test passed" test_output.log
  • 查找失败的测试grep -i "fail" test_output.log
  • 计数测试失败次数grep -i "fail" test_output.log | wc -l

8.4 日志监控和实时分析

  • 监控日志文件的实时变化tail -f log.txt | grep "error"
  • 监控特定服务启动情况tail -f log.txt | grep "started"

8.5 配置文件检查

  • 在开发环境中,常常需要检查配置文件中的某些关键参数。grep 可以帮助快速定位配置项,避免手动查找的繁琐。
  • 查找配置文件中的特定参数grep "db_host" config.yml
  • 查找未配置项或默认值grep -r "default" config/

8.6 文件内容批量替换

  • 某些场景下,需要在多个文件中批量替换内容,grepsed 常常组合使用以实现这一功能。
  • 查找并确认要替换的文本grep -r "old_text" src/
  • 在多个文件中替换文本grep -rl "old_text" src/ | xargs sed -i 's/old_text/new_text/g'

8.7 性能日志分析

  • 在性能测试中,开发人员常需要查找性能日志中某些指标的数值,并进行统计分析。
  • 查找请求响应时间超过特定阈值的记录grep "response_time" performance.log | awk '$3 > 1000'
  • 统计特定时间段的请求数grep "2024-09-18" access.log | wc -l

8.8 版本控制集成

  • 在版本控制系统(如 Git)中,grep 也常被用来快速查找某些提交记录、变更等。
  • 查找某个提交中涉及的变更git grep "function_name"
  • 查看特定文件的历史修改git log -p -- file_name | grep "pattern"

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1562136.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

U盘有盘符却难开启?数据恢复全攻略

一、U盘有盘符但无法打开的现象描述 在日常使用U盘的过程中,我们有时会遇到这样一种情况:将U盘插入电脑后,系统能够正常识别并分配一个盘符,但在双击或右键点击该盘符时,却无法正常打开,甚至会出现错误提示…

图像处理中常用的统计矩

目录 原点矩中心矩常用的统计矩偏度(Skewness)定义解释 峰度(Kurtosis)定义解释 统计矩的应用MATLAB相关函数 原点矩(Moment about the Origin)和中心矩(Central Moment)是概率论和数…

技术发明一等奖!FISCO BCOS研究成果荣获CCF权威认可

近日,中国计算机学会(CCF)正式揭晓了2024年度“CCF科技成果奖”的获奖名单。FISCO BCOS开源工作组组长单位微众银行与清华大学合作的“安全可控高性能区块链基础平台”项目,凭借卓越的技术创新与显著的社会经济效益,荣…

基于Arduino的“鳄鱼嘴”

基于Arduino的“鳄鱼嘴” 一、项目说明二、项目材料三、外壳制作3.1 鳄鱼嘴制作3.2 鳄鱼牙齿制作3.3 眼睛制作 四、电路设计五、舵机连接六、使用方法 一、项目说明 嘿,朋友们,在这篇教程中,我将向你们展示一个万圣节的点子,它将…

AI引起用人格局变动,个人如何应对这一趋势

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 人工智能的发展带来的就业结构变革&#xf…

AI大模型 向量Embeddings+向量数据库实现文搜文、图搜图

文搜文、图搜图介绍: 文搜文 :即文本搜索文本,是指通过输入关键词或短语,在大量文本数据中检索出与之相关的内容 。 搜 索引擎(百度、谷歌、 360 ) 、 文档管理系统 、 电商搜索 。 图搜图 :即图像搜…

【计算机网络】详解IP协议网段划分路由转发子网掩码网络号

一、IP功能 IP可以实现主机定位和路由选择,提供一种能力,将数据可靠地从A点跨网络送到B点。数据先根据目的IP在局域网之间进行转发,再在局域网内进行内网转发。 二、IP协议报头 4 位版本号(version):指定 IP 协议的版本&#xff…

学习Ultralytics(获取yolov8自带的数据集并开始训练)

今天小编带大家学习一下YOLOv8 配置文件,用来定义不同数据集的参数和配置。这些文件包含了关于每个数据集的路径、类别数、类别标签等信息,帮助模型正确地加载和解析数据集,以便进行训练和推理。 具体来说,这些 YAML 文件的作用如…

品牌渠道价格管控策略

在当今竞争激烈的市场环境中,品牌为提升销量和曝光量,积极拓展线上线下销售渠道。然而,不同渠道的价格管控方式存在显著差异,这对品牌的运营和管理提出了挑战。 一、线上线下渠道价格管控特点 线下门店价格管控主要依赖人工巡查。…

基于YOLOV8的西红柿检测系统

基于YOLOv8模型的西红柿检测系统可用于日常生活中检测与定位西红柿(Tomato)目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测。本系统还支持图片、视频等格式的结果可视化。系统采用YOLOv8目标检测算法训练数据集。此外&#…

docker升级mysql

一、首选备份原数据库所有数据 二、在Docker中查看正在运行的MySQL容器名称,可以使用以下命令: docker ps --filter "namemysql" 三、查看当前docker中正在运行mysql的版本 docker exec -it qgz-mysql mysql -V 可以看到当前运行的版本是8.…

NLP入门该看什么书?2024必读NLP书籍!《自然语言处理:基于预训练模型的方法》,快来学起来吧!】

自然语言处理被誉为“人工智能皇冠上的明珠”。近年来,以BERT、GPT 为代表的大规模预训练语言模型异军突起,使问答、检索、摘要、阅读理解等自然语言处理任务性能都得到了显著提升。 《[自然语言处理:基于预训练模型的方法]》一书深入浅出地…

JavaWeb Servlet--09深入:注册系统02--显示所有用户信息

▲▲▲注意:这篇02是必须完成前面的01注册系统---注册界面的!!! 查找所有用户信息界面 该业务就是将数据库里的所有数据进行打印出来反映到界面上,要重新写2个界面,一个是放查询超链接的界面,另一个是跳转…

DBeaver连接mysql 9报错:Public Key Retrieval is not allowed

DBeaver连接mysql 9报错:Public Key Retrieval is not allowed 如图: 解决方案 编辑连接属性: 修改 allowPublicKeyRetrieval 的值为 true DBeaver连接mysql数据库执行.sql脚本,Windows_dbeaver执行sql脚本.sql文件-CSDN博客文章…

机器学习与神经网络荣获诺贝尔物理学奖:科技跨界的新里程碑

在科技日新月异的今天,2024年诺贝尔物理学奖的颁发无疑投下了一颗震撼学术界的重磅炸弹——首次将这一殊荣授予了机器学习与神经网络领域的研究者。这一决定不仅打破了传统物理学奖项的界限,更标志着人类社会对科技进步认知的一次深刻变革,预…

【LeetCode】动态规划—1035. 不相交的线(附完整Python/C++代码)

动态规划—1035. 不相交的线 题目描述前言介绍基本思路1. 问题定义2. 理解问题和递推关系动态规划递推公式:边界条件: 3. 解决方法动态规划方法伪代码: 4. 进一步优化5. 小总结 Python代码Python代码解释总结: C代码C代码解释总结…

大模型时代,程序员当下如何应对 AI 的挑战并迅速成长!!

随着 AI 技术的飞速发展,特别是大模型的出现,传统的程序员角色正在经历深刻的变革,我们不得不重新对自己进行审视和思考。 同时随着 AI 能力的涌现,AI 已经对现有的软件开发模式和程序员的工作模式造成了冲击,并且大语…

BGA封装芯片贴片加工​时需要注意的细节

在进行BGA 芯片贴片加工时,以下是一些需要注意的细节: 1. BGA 芯片储存:要在合适的温度和湿度环境下储存,防止引脚氧化。 2. PCB 焊盘处理:确保焊盘平整、清洁,无氧化和污染。 3. 锡膏印刷:控制…

2024常用10款源代码加密软件推荐!企业必备保护源代码防泄密

在如今信息安全愈发重要的时代,保护源代码免受未经授权的访问和篡改成为了开发者和企业的首要任务之一。源代码是软件的核心,一旦泄露,不仅会造成商业损失,还可能导致安全漏洞的产生。为了应对这些挑战,源代码加密软件…

智能驾驶|迈向智能出行未来,AI如何应用在自动驾驶?

自动驾驶通过人工智能(AI)、机器学习、传感器融合和实时数据处理,使车辆能够在无需人类干预的情况下自主驾驶。随着科技的飞速发展,人工智能(AI)与智能汽车的结合正在成为现代交通运输领域的热潮。无人驾驶…