当前位置: 首页 > news >正文

grep对文件内容搜索(附重要拓展-正则表达式)

    文件搜索是搜索查找符合条件的某文件的目录,若要编辑文件或对文件的某配置进行修改,就需要对文件内容进行搜索。

    grep 命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具,用于搜索一个或多个文件中匹配给定模式的行。grep 代表“Global Regular Expression Print”,意味着它使用正则表达式作为搜索模式,并且能够全局地在文件中查找匹配的文本。

拓展:正则表达式

正则表达式(Regular Expression,通常缩写为 regex、regexp 或 RE)是一种用于文本模式匹配的强大工具。它使用特定的字符序列来描述、匹配和操作字符串,可以用于搜索、替换、提取或验证文本数据中符合特定模式的字符串。普通字符表示它们自身,而特殊字符则具有特定的含义,用来表示字符类、数量限定符、位置或序列查找等功能。 

正则表达式的核心在于其元字符(Metacharacter),这些字符具有特殊的含义,能够代表更广泛的字符集或模式。以下是一些常见的元字符:

  •  `.`:匹配任何单个字符(除了换行符)。
  • `^`:表示行的开始。
  • `$`:表示行的结束。
  • `*`:匹配前一个字符零次或多次。
  • `+`:匹配前一个字符一次或多次。
  • `?`:匹配前一个字符零次或一次。
  • `{m,n}`:匹配前一个字符至少 m 次,至多 n 次。
  • `[ ]`:字符集,匹配括号内的任何一个字符。
  • `|`:表示“或”,匹配左边或右边的表达式。
  • `()`:用于分组,改变优先级或捕获匹配的部分。

正则表达式还支持更多高级特性,如非捕获组、前瞻断言、后瞻断言等,这使得它能够处理更为复杂的匹配逻辑。

正则表达式在各种编程语言和工具中都有应用,如 Perl、Python、JavaScript、Java、.NET、Unix shell 工具(如 sed 和 grep)等。它们被广泛用于数据清洗、文本解析、表单验证、日志分析等各种场景中。

例如,下面是一个简单的正则表达式示例,用于匹配邮箱地址:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

在这个表达式中:

1. [a-zA-Z0-9._%+-]+:

  • 这个部分匹配用户名。方括号 `[ ]` 定义了一个字符集,其中包含的字符都可以匹配。
  • `a-z` 和 `A-Z` 匹配任何小写字母或大写字母。
  • `0-9` 匹配任何数字。
  • `._%+-` 匹配下划线、点号、百分号、加号和减号。
  • `+` 在这里表示前面的字符集可以重复一次或多次。

2. @:

  •    直接匹配 @ 符号,这是电子邮件地址中用户名和域名之间的分隔符。

3. [a-zA-Z0-9.-]+:

  •    同样使用了字符集来匹配域名部分,与用户名部分相似,但是不包括 `%+-`,因为这些字符在域名中通常不会出现。
  • 再次,`+` 表示这个字符集中的任意字符可以重复一次或多次。

4. \.:

  •    点号(`.`)在正则表达式中有特殊含义,所以要匹配实际的点号,需要使用反斜杠(`\`)来转义它。

5. [a-zA-Z]{2,}:

  •      最后一部分用于匹配顶级域名,如 ".com"、".org" 等。
  • [a-zA-Z]表示任何字母。
  • {2,} 表示这部分至少有2个字母,但实际上没有上限,尽管大多数顶级域名不会超过3或4个字母。

将这些部分组合起来,整个正则表达式可以匹配大多数常见的电子邮件地址格式,例如:
·`joha.den@example.com`
·`info@company.co.uk`

——————————————————————————————————————————

grep的基本语法:

grep [options] pattern [file]
  • pattern 是你想要搜索的文本或正则表达式。
  • file 是你要在其中搜索的文件名。如果没有指定文件,grep 会从标准输入中读取数据。

常用选项

  • -i:忽略大小写。
  • -v:反向搜索,即显示不匹配的行。
  • -c:只显示匹配的行数,而不是显示行的内容。
  • -n:显示匹配的行号。
  • -r 或 -R:递归搜索,即搜索指定目录下的所有文件。

注意事项

  • 使用正则表达式时,某些特殊字符需要被转义,例如点号(.)、星号(*)等。
  • 如果 pattern 包含空格,需要用引号包裹起来。
  • grep 支持多种模式,包括固定字符串、正则表达式等。

 应用:

1.抓取已知文档的关键字

如上图,grep对某文件的关键字进行抓取,输出的是带有该关键字的行内容,所有包含该关键字的行都会被抓取出来。

2.单纯的知道行的内容不便于我们修改,如果我们想知道该元素在哪行该怎么办?

如上,即加入-n 即第137行。

验证(用前面学过的cat可以验证一下该元素在哪一行)

即cat -n H.txt

3.除此之外,还有一个选项是反向搜索-v,即不包括后面关键字的行。

这种搜索有什么用呢?

    其中etc路径下存储配置文件,前面加的#代表注释,解释说明的作用,初期对文件不了解时可以借助注释简要了解,但是后期在对服务器运维的过程中,注释过多可能会导致占用内存过多,会影响我们修改文件,所以后期会去掉注释,这时我们就可以利用grep -v '#' /etc/services

    其中注释分为以#开头的注释和中间有#的注释两部分,如下图。

     上个命令会把所有带#的行都抓取出来,若只想把以#开头的注释提取出来,需要在‘#’前加一个^

    与之对应,$符号表示以某关键字结尾,其中该关键字要放在$前面,比如下图以s结尾

     上文我们想去掉注释,但是上面的方法把#不在句首的行也去掉了,也就是说,有一部分的有用信息被去掉了。所以要去掉的是以#开头的行,

4. 之前说过,Linux系统是严格区分大小写的,如果不想区分大小写,需要加入选项-i,如

grep -i abc H.txt

 5.组合使用,搜索当前目录及其子目录中所有 .txt 文件里包含 "s" 的行:

相关文章:

grep对文件内容搜索(附重要拓展-正则表达式)

文件搜索是搜索查找符合条件的某文件的目录,若要编辑文件或对文件的某配置进行修改,就需要对文件内容进行搜索。 grep 命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具,用于搜索一个或多个文件中匹配给定模式的行。grep 代表“Gl…...

前端JS特效第26波:jQuery日期时间选择器插件

jQuery日期时间选择器插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html> <head lang"zh-CN"> <meta charset"UTF-8"> <title>jQuery日期时间选择器插件 - PHP中文网</t…...

Anaconda+Pycharm 项目运行保姆级教程(附带视频)

最近很多小白在问如何用anacondapycharm运行一个深度学习项目&#xff0c;进行代码复现呢&#xff1f;于是写下这篇文章希望能浅浅起到一个指导作用。 附视频讲解地址&#xff1a;AnacondaPycharm项目运行实例_哔哩哔哩_bilibili 一、项目运行前的准备&#xff08;软件安装&…...

java面试-java基础(上)

文章目录 一、什么是Java&#xff1f;特点&#xff1f;二、什么是JVM、JDK、JRE&#xff1f;三、java跨平台实现原理四、java数据类型有哪些?五、char能不能存一个中文汉字?六、存在数字i加1小于i或者i减1小于i?七、什么是自动类型转换与强制类型转换?八、什么是装/拆箱&am…...

STM32快速搭建项目框架

注&#xff1a;编写本博客的原因&#xff0c;学习期间基于复习之前知识点的需要&#xff0c;故撰写本教程&#xff0c;即是复习前面的知识点也是作为博客的补充 1.0 文件夹的创建 创建一个STM32项目为模版工程&#xff0c;问价夹下分别包含4个子文件夹&#xff0c;一个是Librar…...

JMH324-免费【最后一战LOL】MOBA竞技版本+单机一键端+视频教程+文本教程

资源介绍&#xff1a; 修改前打开【D:\ZHServer】文件夹里的【[1]一键启动.bat】&#xff0c;游戏不要打开&#xff0c;否则修改失败。 修改完以后重启架设程序才会生效。 fball_gamedb1数据库——gameuser数据表 obj_name 角色名 obj_lv 等级 obj_diamond 钻石 obj_gold 8…...

WPF UI 3D 多轴 机械臂 stl 模型UI交互

1、三维插件环境调整 2、动态模型材质处理 3、动态模型鼠标交互 4、模型旋转基本思路 5、六轴机械臂节点旋转处理 6、更多HelixToolkit插件处理案例 7、快速对接Blender模型 鼠标交互&#xff08;没有强调场景的变换&#xff09; 鼠标命中测试&#xff08;HitTest 不推荐&…...

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉&#xff0c;在 2024 世界人工智能大会这一科技盛宴上&#xff0c;金山办公以其前瞻性的视野和创新的技术&#xff0c;正式发布了 WPS AI 2.0&#xff0c;犹如一颗璀璨的星辰&#xff0c;照亮了智能办公的新征程&#xff0c;同时首次公开的金山政务办公模型 1.…...

RT2-使用NLP的方式去训练机器人控制器

目标 研究在网络数据上训练的视觉语言模型也可以直接结合到端到端的机器人控制中&#xff0c;提升泛化性以及获得突出的语义推理&#xff1b;使得单个的端到端训练模型可以同时学习从机器人观测到动作的映射&#xff0c;这个过程可以受益于基于网络上的语言和视觉语言数据的预训…...

VisActor vs ECharts: 哪个更适合你的数据可视化需求?

VisActor vs ECharts: 哪个更适合你的数据可视化需求&#xff1f; 在当今数据驱动的世界里&#xff0c;选择合适的数据可视化工具是至关重要的。ECharts作为广受欢迎的可视化库&#xff0c;已经在行业内拥有了长久的历史和广泛的用户基础。然而&#xff0c;VisActor作为新兴的…...

【QT中实现摄像头播放、以及视频录制】

学习分享 1、效果图2、camerathread.h3、camerathread.cpp4、mainwindow.h5、mainwindow.cpp6、main.cpp 1、效果图 2、camerathread.h #ifndef CAMERATHREAD_H #define CAMERATHREAD_H#include <QObject> #include <QThread> #include <QDebug> #include &…...

el-table封装popver組件,点击列筛选行数据功能,支持筛选,搜索,排序功能

子组件&#xff1a; <template><div class"tableTool" ref"tableTool" click.stop><el-button click"shengFnc">升序</el-button><el-button click"jiangFnc">降序</el-button><el-input v-m…...

基于DPU的云原生计算资源共池管理解决方案

1. 方案背景和挑战 在传统的云环境中&#xff0c;通常存在着不同的技术栈&#xff0c;支撑多样化的计算服务&#xff0c;具体如下&#xff1a; ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目&#xff0c;它提供了部署和管理大规模计…...

Bugly并非无所不能

在 iOS 应用因为内存占用过大而被系统 killed 的情况下&#xff0c;Bugly 以及大多数崩溃报告工具是无法捕获到这种类型的崩溃信息的。原因在于&#xff0c;当系统由于内存压力过大而终止应用时&#xff0c;是直接将应用进程杀死&#xff0c;不会触发常规的崩溃处理流程&#x…...

2024年信息系统项目管理师1批次上午客观题参考答案及解析(3)

51、探索各种选项&#xff0c;权衡包括时间与成本、质量与成本、风险与进度、进度与质量等多种因素&#xff0c;在整个过程中&#xff0c;舍弃无效或次优的替代方案&#xff0c;这种不确定性应对方法是()。 A&#xff0e;集合设计 B&#xff0e;坚韧性 C&#xff0e;多种结果…...

YOLOv8改进 | 注意力机制 | 对密集和小目标友好的EVAblock 【原理 + 完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…...

高效前端开发:解密pnpm的存储与链接

什么是pnpm PNPM&#xff08;Performant NPM&#xff09;是一种快速且节省磁盘空间的包管理工具。相较于其他包管理器如NPM和Yarn&#xff0c;PNPM通过独特的存储机制和链接技术解决了许多常见的问题。以下是PNPM如何避免这些问题以及其关键技术的详细介绍。 特性 PNPM Store…...

设置单实例Apache HTTP服务器

配置仓库 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vi rpm.repo仓库代码&#xff1a; [BaseOS] nameBaseOS baseurl/mnt/BaseOS enabled1 gpgcheck0[AppStream] nameAppStream baseurl/mnt/AppStream enabled1 gpgcheck0挂载 [rootlocalhost …...

Python | Leetcode Python题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:if len(matrix) 0 or len(matrix[0]) 0:return 0maxSide 0rows, columns len(matrix), len(matrix[0])dp [[0] * columns for _ in range(rows)]for i in…...

使用Python实现线性拟合

如下 Python 代码主要用于处理和分析数据&#xff0c;并使用 Matplotlib 库绘制出数据的拟合曲线。它的主要步骤包括数据预处理、进行线性回归分析&#xff0c;并根据结果绘图展示。下面是对代码及其所引用库的详细解释&#xff1a; 引用的库 numpy (np): 用于进行数值计算。这…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...