软件测试学习笔记丨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 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用JAVA写人工智能应用_JAVA_AI

目录 ​编辑 Java AI 介绍:Spring AI - Java领域的AI开发新利器 Spring AI 扩展:Spring AI Alibaba,简化Java应用AI集成 SpringBoot集成阿里云AI服务:构建对话应用指南 基于SpringBoot集成Spring AI Alibaba 1. 环境准备 2…

JavaScript将array数据下载到Excel中

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

【Windows命令】Windows下启动Nginx后,在任务管理器里面没有发现nginx.exe进程

如题&#xff0c;当在本地Windows环境下想用反向代理时&#xff0c;突然发现在任务管理器里面没有发现nginx.exe进程&#xff0c;但是端口又是占用的。这时就要用Windows命令了。 查询端口占用 netstat -ano | findstr :80 根据进程ID&#xff08;pid&#xff09;查询进程名称…

Java_EE(反射技术)

反射机制介绍: 什么是反射Java反射机制是Java语言一个很重要的特性&#xff0c;它使得Java具有了“动态性”。在Java程序运行时&#xff0c;对于任意的一个类&#xff0c;我们能不能知道这个类有哪些属性和方法呢&#xff1f;对于任意的一个对象&#xff0c;我们又能不能调用它…

IOS APP初体验-第2课:给Iphone App设置个ICON

目录 第一步、图片尺寸 第二步、找到项目内Assets节点&#xff0c;把自己的图片复制进来 第三步、图片设置 第四步、启动项目真机调试 第一步、图片尺寸 设置一张图片&#xff0c;要求图片格式JPG&#xff0c;图片尺寸1024px*1024px。 第二步、找到项目内Assets节点&#…

2024腾讯全球数字生态大会 | 线上直播活动参与教程

2024腾讯全球数字生态大会 | 线上直播活动参与教程 9月5-6日,2024腾讯全球数字生态大会,共见最新 全景式产品服务矩阵,了解智能科技如何成本优化、 生产提效、重塑商业生态、加速全球布局。 大会亮点 100大咖趋势洞察 100专业白皮书 100开发者活动福利 体验丰富前沿智能应用落…

SCALABLEANDEFFECTIVE IMPLICIT GRAPH NEURALNETWORKS ON LARGEGRAPHS

ICLR24 推荐指数&#xff1a; #paper/⭐⭐ 领域&#xff1a; 大图&#xff0c;图扩展 大概的工作&#xff1a;提出了针对子图的虚拟节点&#xff0c;让所有点都与其相连 相关工作&#xff1a; 传统GNN与Inplicit gnn 传统GNN的传播函数&#xff1a; Z ( l 1 ) ϕ ( W ( …

Linux常用功能整合

Linux Linux 前言一、常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二、磁盘 磁盘接口磁盘的文件名 三、分区 分区表开机检测程序 四、文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置 五、文件 文件属性文件…

01 Solidity--

第一个 Solidity 程序 Solidity 是一种用于编写以太坊虚拟机&#xff08;EVM&#xff09;智能合约的编程语言。 掌握 Solidity 是参与链上项目的必备技能 在 Remix 中&#xff0c;左侧菜单有三个按钮&#xff0c;分别对应文件&#xff08;编写代码&#xff09;、编译&#x…

Spring ApplicationContext初始化过程

Spring-01篇章 一、Spring 简介 Spring是一个开源的Java平台&#xff0c;它提供了全面的基础设施支持来帮助Java开发者更容易地开发Java应用程序。Spring框架的核心特点是依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;&#xff0c;这些使得开…

【H2O2|全栈】JS入门知识(一)

目录 JS入门 前言 准备工作 JS标签和文件 变量 数据类型 字符串 变量的交换 数据类型获取 数据类型转换 面试题 提问框和提示框 提问框 提示框 ​编辑​编辑控制台输出 ​编辑转义字符 结束语 JS入门 前言 本系列博客主要分享JavaScript的基础语法知识&…

RNA-seq全流程

第一部分&#xff1a;脚本的初始设置与参数解析 #!/bin/bash# 检查输入参数 if [ "$#" -lt 1 ]; thenecho "Usage: $0 -f <sample_file> -d <data_directory> -s <script_directory> -g <group_file>"exit 1 fi# 使用 R 语言的 a…

2025推荐选题|基于Springboot和vue的智慧阅读管理系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

【CSS】houdini自定义CSS属性实现渐变色旋转动画

现有一段代码&#xff0c;在不旋转整个元素的前提下&#xff0c;渐变背景无法应用动画 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

专业模拟训练头显,Varjo XR-4 如何开启虚拟仿真新模拟时代

虚拟仿真模拟训练是提升技能熟练度与工作安全性的有效解决方案&#xff0c;Varjo XR-4作为专业模拟训练头显&#xff0c;凭借其出色的技术特性和性能&#xff0c;正在引领虚拟仿真模拟训练进入一个全新的时代。 一、卓越的视觉体验 高分辨率显示器&#xff1a;Varjo XR-4配备…

计算机毕业设计 基于Python的美术馆预约系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

三子棋(C 语言)

目录 一、游戏设计的整体思路二、各个步骤的代码实现1. 菜单及循环选择的实现2. 棋盘的初始化和显示3. 轮流下棋及结果判断实现4. 结果判断实现 三、所有代码四、总结 一、游戏设计的整体思路 &#xff08;1&#xff09;提供一个菜单让玩家选择人机对战、玩家对战或者退出游戏…

大厂面试真题-组合和聚合的区别是什么

组合和聚合比较类似&#xff0c;二者都表示整体和部分之间的关系。 聚合关系的特点是&#xff1a;整体由部分构成&#xff0c;但是整体和部分之间并不是强依赖的关系&#xff0c;而是弱依 赖的关系&#xff0c;也就是说&#xff0c;即使整体不存在了&#xff0c;部分仍然存在…

Zabbix监控vCenter虚拟机

1. vcenter上配置snmp agent 如果配置 vCenter Server Appliance SNMP 代理以用于轮询,则它可以侦听和响应来自 SNMP 管理客户端系统的请求,如 GET、GETNEXT 和 GETBULK 请求. 使用root身份进入vcenter命令行,开启snmp代理 Command> snmp.enable Command> snmp.set…