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日期时间选择器插件,先来看看效果: 部分核心的代码如下: <!DOCTYPE html> <html> <head lang"zh-CN"> <meta charset"UTF-8"> <title>jQuery日期时间选择器插件 - PHP中文网</t…...
Anaconda+Pycharm 项目运行保姆级教程(附带视频)
最近很多小白在问如何用anacondapycharm运行一个深度学习项目,进行代码复现呢?于是写下这篇文章希望能浅浅起到一个指导作用。 附视频讲解地址:AnacondaPycharm项目运行实例_哔哩哔哩_bilibili 一、项目运行前的准备(软件安装&…...
java面试-java基础(上)
文章目录 一、什么是Java?特点?二、什么是JVM、JDK、JRE?三、java跨平台实现原理四、java数据类型有哪些?五、char能不能存一个中文汉字?六、存在数字i加1小于i或者i减1小于i?七、什么是自动类型转换与强制类型转换?八、什么是装/拆箱&am…...
STM32快速搭建项目框架
注:编写本博客的原因,学习期间基于复习之前知识点的需要,故撰写本教程,即是复习前面的知识点也是作为博客的补充 1.0 文件夹的创建 创建一个STM32项目为模版工程,问价夹下分别包含4个子文件夹,一个是Librar…...
JMH324-免费【最后一战LOL】MOBA竞技版本+单机一键端+视频教程+文本教程
资源介绍: 修改前打开【D:\ZHServer】文件夹里的【[1]一键启动.bat】,游戏不要打开,否则修改失败。 修改完以后重启架设程序才会生效。 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模型 鼠标交互(没有强调场景的变换) 鼠标命中测试(HitTest 不推荐&…...
《金山 WPS AI 2.0:重塑办公未来的智能引擎》
AITOP100平台获悉,在 2024 世界人工智能大会这一科技盛宴上,金山办公以其前瞻性的视野和创新的技术,正式发布了 WPS AI 2.0,犹如一颗璀璨的星辰,照亮了智能办公的新征程,同时首次公开的金山政务办公模型 1.…...
RT2-使用NLP的方式去训练机器人控制器
目标 研究在网络数据上训练的视觉语言模型也可以直接结合到端到端的机器人控制中,提升泛化性以及获得突出的语义推理;使得单个的端到端训练模型可以同时学习从机器人观测到动作的映射,这个过程可以受益于基于网络上的语言和视觉语言数据的预训…...
VisActor vs ECharts: 哪个更适合你的数据可视化需求?
VisActor vs ECharts: 哪个更适合你的数据可视化需求? 在当今数据驱动的世界里,选择合适的数据可视化工具是至关重要的。ECharts作为广受欢迎的可视化库,已经在行业内拥有了长久的历史和广泛的用户基础。然而,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組件,点击列筛选行数据功能,支持筛选,搜索,排序功能
子组件: <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. 方案背景和挑战 在传统的云环境中,通常存在着不同的技术栈,支撑多样化的计算服务,具体如下: ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目,它提供了部署和管理大规模计…...
Bugly并非无所不能
在 iOS 应用因为内存占用过大而被系统 killed 的情况下,Bugly 以及大多数崩溃报告工具是无法捕获到这种类型的崩溃信息的。原因在于,当系统由于内存压力过大而终止应用时,是直接将应用进程杀死,不会触发常规的崩溃处理流程&#x…...
2024年信息系统项目管理师1批次上午客观题参考答案及解析(3)
51、探索各种选项,权衡包括时间与成本、质量与成本、风险与进度、进度与质量等多种因素,在整个过程中,舍弃无效或次优的替代方案,这种不确定性应对方法是()。 A.集合设计 B.坚韧性 C.多种结果…...
YOLOv8改进 | 注意力机制 | 对密集和小目标友好的EVAblock 【原理 + 完整代码】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…...
高效前端开发:解密pnpm的存储与链接
什么是pnpm PNPM(Performant NPM)是一种快速且节省磁盘空间的包管理工具。相较于其他包管理器如NPM和Yarn,PNPM通过独特的存储机制和链接技术解决了许多常见的问题。以下是PNPM如何避免这些问题以及其关键技术的详细介绍。 特性 PNPM Store…...
设置单实例Apache HTTP服务器
配置仓库 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vi rpm.repo仓库代码: [BaseOS] nameBaseOS baseurl/mnt/BaseOS enabled1 gpgcheck0[AppStream] nameAppStream baseurl/mnt/AppStream enabled1 gpgcheck0挂载 [rootlocalhost …...
Python | Leetcode Python题解之第221题最大正方形
题目: 题解: 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 代码主要用于处理和分析数据,并使用 Matplotlib 库绘制出数据的拟合曲线。它的主要步骤包括数据预处理、进行线性回归分析,并根据结果绘图展示。下面是对代码及其所引用库的详细解释: 引用的库 numpy (np): 用于进行数值计算。这…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
