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

Linux grep命令教程:强大的文本搜索工具(附案例详解和注意事项)

Linux grep命令介绍

grep (Global Regular Expression Print)命令用来在文件中查找包含或者不包含某个字符串的行,它是强大的文本搜索工具,并可以使用正则表达式进行搜索。当你需要在文件或者多个文件中搜寻特定信息时,grep就显得无比重要啦。

Linux grep命令适用的Linux版本

grep命令在几乎所有的Linux发行版中都可以使用。以下是在CentOS 7和CentOS 8中安装grep的命令。

[linux@bashcommandnotfound.cn ~]$ sudo yum install grep  # for CentOS 7
[linux@bashcommandnotfound.cn ~]$ sudo dnf install grep  # for CentOS 8

Linux grep命令的基本语法

语法格式:

grep [options] pattern [file...]

Linux grep命令的常用选项或参数说明

参数说明
-v–invert-match 反向选择,只显示没有匹配到的行
-i–ignore-case 忽略大小写
-r–recursive 递归处理,指定目录下的所有文件以及子目录中的文件
-l–files-with-matches 列出文件内容符合指定的样式的文件名称
-n–line-number 显示匹配行及其行号
–color=auto–color 在显示匹配行时,将匹配的字符串以特定颜色突出显示

Linux grep命令实例详解

实例1:使用grep查找包含特定字符串的行

使用grep,我们可以在文件中查找包含特定字符串的行。这是grep的基本用法。

[linux@bashcommandnotfound.cn ~]$ grep 'pattern' filename

实例2:使用grep和正则表达式查找字符串

grep不仅能够基于字符串搜寻信息,还能够搭配正则表达式进行更为复杂的搜索。

[linux@bashcommandnotfound.cn ~]$ grep 'regex' filename

实例3:使用grep在多个文件中搜索

grep Command 不仅可以在一个文件中进行搜索,也可以在多个文件中查找匹配的行。

[linux@bashcommandnotfound.cn ~]$ grep 'pattern' file1 file2 file3

实例4:使用grep配合通配符搜索

在某种情况下,你可能需要在特定类型的文件,如所有的文本(.txt)文件中进行搜索,可以使用通配符(*)。

[linux@bashcommandnotfound.cn ~]$ grep 'pattern' *.txt

实例5:使用grep查找不符合匹配的行

如果你想查找不包含某些字符串或者模式的行,可以使用 -v 选项。

[linux@bashcommandnotfound.cn ~]$ grep -v 'pattern' filename

实例6:使用grep搜索并高亮匹配内容

使用 --color=auto 选项,可以高亮显示匹配的字符串。

[linux@bashcommandnotfound.cn ~]$ grep --color=auto 'pattern' filename

实例7:使用grep读取另一个命令的输出

grep命令可以配合管道操作符(|)搜寻另一个命令的输出。

[linux@bashcommandnotfound.cn ~]$ command | grep 'pattern'

实例8:使用grep显示匹配字符串的前后行

-c选择项,它除了可以列出行号外,还可以列出符合范本样式的具体是哪些行,假设我们希望找出符合范本样式的前2行,那么我们可以这样写:

[linux@bashcommandnotfound.cn ~]$ grep -B 2 'pattern' filename

实例9:在文件中搜索多个模式

你可以在同一文件中查找多个模式。只需要使用-e选项就可以达到这个目的。

[linux@bashcommandnotfound.cn ~]$ grep -e 'pattern1' -e 'pattern2' filename

实例10:在文本中查找数字

有的时候你可能需要基于握手的数字范围来进行搜索。我们可以结合正则表达式来进行搜索。

[linux@bashcommandnotfound.cn ~]$ grep '[0-9]' filename

实例11:在一个目录中查找含有某一字符串的文件

grep指令可以在一个目录中的所有文件中搜寻含有某一指定字符串的文件。

[linux@bashcommandnotfound.cn ~]$ grep -r 'pattern' directory

实例12:统计文件中匹配某个字符串的行数

使用grep -c我们可以轻易得到文件中匹配特定字符串的行数。

[linux@bashcommandnotfound.cn ~]$ grep -c 'pattern' filename

实例13:查找特定格式的字符串

有时,我们可能需要查找符合特定格式的字符串,如,我们可以找出所有格式为字母-字母-字母的字符串。

[linux@bashcommandnotfound.cn ~]$ grep '[A-Za-z]-[A-Za-z]-[A-Za-z]' filename

实例14:使用grep且忽略大小写

有时候我们对大小写并不敏感,可以通过 -i 选项忽略大小写进行查找:

[linux@bashcommandnotfound.cn ~]$ grep -i 'pattern' filename

实例15:在多级目录中使用grep搜索

使用 -R 或 -r 选项,grep 命令可以在多级子目录中进行递归搜索:

[linux@bashcommandnotfound.cn ~]$ grep -R 'pattern' directory

实例16:显示匹配结果的上下文

有时候我们想知道匹配行的上下文信息,即查看它前后的行。可以使用 -A,-B,-C 选项完成这个需求:

[linux@bashcommandnotfound.cn ~]$ grep -C 5  'pattern' filename #-A 5显示匹配行之后5行,-B 5显示匹配行之前5行

实例17:显示包含匹配行的文件名

如果你想知道包含匹配行的文件名,可以使用 -l 选项:

[linux@bashcommandnotfound.cn ~]$ grep -l 'pattern' file1 file2 file3

实例18:使用egrep完成多模式搜索

egrep 是 grep 的拓展版,它可以同时进行多模式搜索:

[linux@bashcommandnotfound.cn ~]$ egrep 'pattern1|pattern2' filename

实例19:grep中的正则表达式

grep可以配合正则表达式来使用,非常灵活和强大:

[linux@bashcommandnotfound.cn ~]$ grep '^pattern' filename  #搜索以"pattern"开头的行

实例20:输出匹配行数量,而不是匹配行的内容

如果只想知道匹配行的数量,而不是具体的行,可以使用 -c 选项:

[linux@bashcommandnotfound.cn ~]$ grep -c 'pattern' filename

Linux grep命令的注意事项

  1. 如果搜索字符串中包含特殊字符,你可能要用引号将搜索字符串括起来;
  2. grep命令默认只对当前目录下的文件进行递归搜索,如果你需要在所有子目录中搜索,需要使用-r或者-R选项;
  3. grep搜索是大小写敏感的,如果需要忽略大小写,需要使用-i选项。
  4. 如果你遇到bash: grep: command not found,那就按照上述方法进行安装。

Linux grep相关命令

  1. egrep命令:扩展grep,支持更多的正则表达式
  2. fgrep命令:速度更快的grep,不支持正则表达式
  3. sed命令:流编辑器,用于对文本文件进行复杂的处理
  4. awk命令:文本和数据处理语言

相关文章:

Linux grep命令教程:强大的文本搜索工具(附案例详解和注意事项)

Linux grep命令介绍 grep (Global Regular Expression Print)命令用来在文件中查找包含或者不包含某个字符串的行,它是强大的文本搜索工具,并可以使用正则表达式进行搜索。当你需要在文件或者多个文件中搜寻特定信息时,grep就显得无比重要啦…...

网络安全的威胁PPT

建议的PPT免费模板网站:http://www.51pptmoban.com/ppt/ 此PPT模板下载地址:https://file.51pptmoban.com/d/file/2023/03/20/1ae84aa8a9b666d2103f19be20249b38.zip 内容截图:...

CUDA驱动深度学习发展 - 技术全解与实战

全面介绍CUDA与pytorch cuda实战 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士&…...

如何做用户分层和标签体系

“活动作了一场接一场,简直要累死了,拉进来的客户也没有多少,投入产出完全不成比例,怎么办?“ “有那么多注册用户,但是GMV怎么才这么点,他们怎么不买啊,难道都是羊毛党?…...

Vue+Element Ui实现el-table自定义表头下拉选择表头筛选

用vueelement ui开发管理系统时,使用el-table做表格,当表格列过多的时候,想要做成可选表头的,实现表格列的筛选显示,效果如下: 代码文件结构: 废话不多说,直接上代码: 第…...

使用Java连接MongoDB (6.0.12) 报错

报错: Exception in thread "main" com.mongodb.MongoCommandException: Command failed with error 352: Unsupported OP_QUERY command: create. 上图中“The client driver may require an upgrade”说明了“客户端驱动需要进行升级”,解…...

数学建模day16-预测模型

本讲首先将介绍灰色预测模型,然后将简要介绍神经网络在数据预测中的应用,在本讲的最 后,我将谈谈清风大佬对于数据预测的一些看法。 注:本文源于数学建模学习交流相关公众号观看学习视频后所作 目录 灰色系统 GM(1,1)…...

Vue3响应式系统(一)

一、副作用函数。 副作用函数指的是会产生副作用的函数。例如:effect函数会直接或间接影响其他函数的执行,这时我们便说effect函数产生了副作用。 function effect(){document.body.innerText hello vue3 } 再例如: //全局变量let val 2f…...

MStart | MStart开发与学习

MStart | MStart开发与学习 1.学习 1.MStart |开机LOG显示异常排查及调整...

GoZero微服务个人探索之路(一)Etcd:context deadline exceeded原因探究及解决

产生错误原因就是与etcd交互时候需要指定: 证书文件的路径 客户端证书文件的路径 客户端密钥文件的路径 (同时这貌似是强制默认就需要指定了) 但我们怎么知道这三个文件路径呢,如下方法 1. 找到etcd的配置文件,里…...

C语言从入门到实战——结构体与位段

结构体与位段 前言一、结构体类型的声明1.1 结构体1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 二、 结构体内存对齐2.1 对齐规则2.2 为什么存在内存对齐2.3 修改默认对齐数 三、结构体传参四、 结构体实现位段4.1 什么是位段4.2 位段…...

java如何修改windows计算机本地日期和时间?

本文教程,主要介绍,在java中如何修改windows计算机本地日期和时间。 目录 一、程序代码 二、运行结果 一、程序代码 package com;import java.io.IOException;/**** Roc-xb*/ public class ChangeSystemDate {public static void main(String[] args)…...

flink中的row类型详解

在Apache Flink中,Row 是一个通用的数据结构,用于表示一行数据。它是 Flink Table API 和 Flink DataSet API 中的基本数据类型之一。Row 可以看作是一个类似于元组的结构,其中包含按顺序排列的字段。 Row 的字段可以是各种基本数据类型&…...

漏洞复现-Yearning front 任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

K8S中SC、PV、PVC的理解

存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,而持久卷(PersistentVolume)是实际的存储资源,持久卷声明(PersistentVolumeClaim&#…...

Agisoft Metashape 基于影像的外部点云着色

Agisoft Metashape 基于影像的外部点云着色 文章目录 Agisoft Metashape 基于影像的外部点云着色前言一、添加照片二、对齐照片三、导入外部点云四、为点云着色五、导出彩色点云前言 本教程介绍了在Agisoft Metashape Professional中,将照片中的真实颜色应用于从不同源获取的…...

图解结算平台:准确高效给商户结款

这是《百图解码支付系统设计与实现》专栏系列文章中的第(4)篇。 本章主要讲清楚支付系统中商户结算涉及的基本概念,产品架构、系统架构,以及一些核心的流程和相关领域模型、状态机设计等。 1. 前言 收单结算是支付系统最重要的子…...

修改和调试 onnx 模型

1. onnx 底层实现原理 1.1 onnx 的存储格式 ONNX 在底层是用 Protobuf 定义的。Protobuf,全称 Protocol Buffer,是 Google 提出的一套表示和序列化数据的机制。使用 Protobuf 时,用户需要先写一份数据定义文件,再根据这份定义文…...

不同整数的最少数目和单词直接最短距离

写是为了更好的思考,坚持写作,力争更好的思考。 今天分享两个关于“最小、最短”的算法题,废话少说,show me your code! 一、不同整数的最少数目 给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素&…...

【Microsoft Edge】版本 109.0.1518.55 (正式版本) (64 位) 更新失败解决方案

Microsoft Edge 版本号 109.0.1518.55(正式版本)(64位) 更新直接报错 检查更新时出错: 无法创建该组件(错误代码 3: 0x80040154 – system level) 问题出现之前 之前电脑日常硬盘百分百(删文件和移动文件都慢得像…...

低成本个人知识库:OpenClaw+Qwen3-32B构建自动化归档系统

低成本个人知识库:OpenClawQwen3-32B构建自动化归档系统 1. 为什么需要个人知识库自动化 作为一个长期与技术文档打交道的开发者,我发现自己陷入了一个怪圈:每天收集大量有价值的网页、论文和代码片段,但它们最终都散落在浏览器…...

MTK6737平台LCD驱动移植保姆级教程:从供应商参数到开机Logo的完整避坑指南

MTK6737平台LCD驱动移植实战:从零构建显示系统的关键技术与避坑指南 在嵌入式设备开发中,显示系统作为人机交互的核心组件,其稳定性直接影响用户体验。MTK6737作为主流中端移动处理器平台,广泛应用于各类智能设备,而HX…...

Cobra嵌入式VAD引擎:MCU端语音活动检测实战指南

1. Cobra嵌入式语音活动检测引擎技术解析1.1 工程定位与核心价值Cobra 是由 Picovoice 开发的轻量级、高精度语音活动检测(Voice Activity Detection, VAD)引擎,专为资源受限的微控制器(MCU)平台设计。其核心工程目标并…...

前端手写电子签系统实战:SVG为何是合同图片合成的最优解

一、前端手写电子签系统核心需求拆解 在开发手写电子签系统时,前端需满足以下核心业务与技术需求,这也是方案选型的核心依据: 高清无损:合同属于正式法律文件,签名、填写的字段文字需保证任意缩放、打印后均清晰无失真…...

《SpringBoot》EasyExcel实现百万数据的导入导出

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

高德地图JS API报错10009?手把手教你解决USERKEY_PLAT_NOMATCH问题

高德地图JS API报错10009?手把手教你解决USERKEY_PLAT_NOMATCH问题 当你在前端项目中集成高德地图JS API时,突然控制台抛出USERKEY_PLAT_NOMATCH错误(错误码10009),这意味着你的密钥与当前使用平台不匹配。这种问题看…...

告别SDK迷宫:手把手教你用CCS12.1.0为TMS320F280039搭建纯净工程骨架(附文件屏蔽指南)

告别SDK迷宫:手把手教你用CCS12.1.0为TMS320F280039搭建纯净工程骨架(附文件屏蔽指南) 第一次打开C2000Ware MotorControl SDK时,那种被数百个文件夹和文件淹没的感觉,相信很多开发者都深有体会。面对如此庞大的资源库…...

无痛人流三天能出门吗?术后出行与身体恢复科学指南

很多女性在无痛人流术后都会关心出行与恢复问题,其中 “无痛人流三天能出门吗” 是高频咨询内容。术后恢复不仅关系到短期舒适度,也影响生殖系统长期健康。结合临床护理经验与行业康复标准,本文对术后出行时机、注意事项及科学修护方式进行客…...

一种改进的鹈鹕优化算法(IPOA)用于函数寻优研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

Linux/C++多进程

给你最简洁、能直接用、新手一看就懂的 Linux C 多进程核心内容,不废话。1. 核心 API(就这 3 个最常用)fork():创建子进程getpid():获取当前进程 IDwait() / waitpid():等待子进程结束,防止僵尸…...