当前位置: 首页 > 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): 用于进行数值计算。这…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...