Linux 查找特定字符详细讲解

CentOS 7 中使用 grep 查找特定字符详细笔记​

一、grep 命令概述​

grep 全称为 Global Regular Expression Print,即全局正则表达式打印,是 CentOS 7 系统中用于文本搜索的核心工具。它基于正则表达式或固定字符串,在文件、标准输入流中进行模式匹配,并输出符合条件的行。其本质是通过扫描文本内容,将每一行与指定模式对比,一旦匹配成功就输出该行。​

二、grep 命令语法结构详解​

grep 的基本语法为:​

TypeScript

取消自动换行复制

grep [选项] "搜索模式" [文件名或目录]​

其中,[选项]用于调整搜索行为,"搜索模式"是待匹配的字符、字符串或正则表达式,[文件名或目录]指定搜索范围。若省略文件名,grep 会从标准输入(如管道传入的数据)读取内容进行搜索。​

三、常用选项深度解析​

选项​

全称​

功能描述​

示例及说明​

-i​

--ignore-case​

忽略大小写匹配,使搜索不区分字符的大小写形式​

查找包含 “Linux” 或 “linux” 的行:grep -i "linux" file.txt,会同时匹配Linux is great和linux kernel等行​

-v​

--invert-match​

反向匹配,输出不包含指定模式的行​

从日志文件中排除包含 “success” 的行:grep -v "success" log.txt,常用于过滤掉已知的正常信息,聚焦异常数据​

-n​

--line-number​

显示匹配行的行号,方便定位文本位置​

查找配置文件中包含 “database” 的行及其行号:grep -n "database" config.ini,输出格式如5:database = mysql,便于快速定位到文件第 5 行​

-c​

--count​

仅统计匹配行数,不输出具体内容,适用于统计匹配数量场景​

统计日志中出现 “error” 的次数:grep -c "error" system.log,返回一个数字,直观展示错误发生频率​

-l​

--files-with-matches​

列出包含匹配内容的文件名,可用于批量筛选文件​

在目录中查找包含 “important” 的文件:grep -rl "important" /home/user/documents,递归搜索目录下所有文件并列出文件名​

-L​

--files-without-match​

列出不包含匹配内容的文件名,与-l功能相反​

找出目录中不包含 “temp” 的文件:grep -rL "temp" /var/tmp,方便清理无用文件​

-r 或 -R​

--recursive​

递归搜索指定目录下的所有文件,包含子目录中的文件​

搜索/etc目录下所有配置文件中包含 “network” 的内容:grep -r "network" /etc/,常用于在大型目录树中查找特定配置项​

-w​

--word-regexp​

匹配完整单词,通过单词边界(\b)判断,避免部分匹配​

查找包含 “user” 但不包含 “username” 的行:grep -w "user" users.txt,确保只匹配独立的 “user” 单词​

-E​

--extended-regexp​

使用扩展正则表达式,简化部分复杂语法,等价于egrep​

匹配以 “http” 或 “https” 开头的 URL:grep -E "^http(s)?://" urls.txt,相比基本正则表达式,无需对?等字符转义​

-F​

--fixed-strings​

按固定字符串匹配,不解析正则表达式,效率更高​

查找包含固定字符串 “example.com” 的行:grep -F "example.com" domains.txt,适用于已知字符串,无需正则解析的场景​

-o​

--only-matching​

仅输出匹配的字符串本身,而非整行内容​

提取文本中所有邮箱地址:grep -oE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" emails.txt,只返回邮箱字符串,便于数据提取​

四、基础使用场景与示例​

1. 简单字符串匹配​

场景:在文件test.txt中查找包含字符串 “hello world” 的行。​

TypeScript

取消自动换行复制

grep "hello world" test.txt​

执行逻辑:grep 逐行读取test.txt,将每一行内容与 “hello world” 对比,若完全匹配则输出该行。若文件内容为:​

TypeScript

取消自动换行复制

This is a test line.​

hello world, welcome!​

Another line without match.​

则输出结果为:hello world, welcome!​

2. 忽略大小写匹配​

场景:在代码文件中查找包含 “class” 或 “Class” 的行。​

TypeScript

取消自动换行复制

grep -i "class" code.php​

对比说明:若不使用-i选项,grep "class" code.php只会匹配小写 “class”,而-i选项使搜索同时匹配class MyClass和Class AnotherClass等大小写不同的行。​

3. 反向匹配(排除特定内容)​

场景:从系统进程列表中排除包含 “sshd” 的进程信息。​

TypeScript

取消自动换行复制

ps -ef | grep -v "sshd"​

原理:先通过ps -ef获取所有进程信息,再由grep -v过滤掉包含 “sshd” 的行,常用于排查除特定进程外的其他进程状态。​

4. 显示行号​

场景:在配置文件nginx.conf中查找包含 “server_name” 的行及其行号。​

TypeScript

取消自动换行复制

grep -n "server_name" nginx.conf​

输出示例:​

TypeScript

取消自动换行复制

12:server_name example.com;​

25:server_name www.example.com;​

方便管理员快速定位到配置文件的具体位置进行修改。​

5. 统计匹配行数​

场景:统计日志文件access.log中包含 “404” 错误状态码的请求数量。​

TypeScript

取消自动换行复制

grep -c "404" access.log​

应用价值:通过返回的数字,可直观了解网站当天或某个时间段内出现 404 错误的频率,辅助进行故障排查和优化。​

五、进阶用法:正则表达式深度剖析​

grep 支持基本正则表达式(BRE)和扩展正则表达式(ERE,通过-E选项启用),以下是常见元字符及用法示例:​

1. 基本正则表达式(BRE)​

匹配任意单个字符(.)​

场景:查找文件名中包含 “a.xxx” 格式的行(如 “a.txt”、“a.log”)。​

TypeScript

取消自动换行复制

grep "a..*" files.list​

解析:.匹配任意单个字符,.*表示匹配零个或多个任意字符。若files.list内容为:​

TypeScript

取消自动换行复制

a.txt​

b.log​

a.pyc​

则输出a.txt和a.pyc两行,因为它们以 “a.” 开头。​

匹配字符范围([])​

场景:查找包含数字或小写字母的行。​

TypeScript

取消自动换行复制

grep "[0-9a-z]" text.txt​

原理:[0-9a-z]表示匹配 0-9 的数字或 a-z 的小写字母中的任意一个字符,只有包含这些字符的行才会被输出。​

匹配单词边界(\< 和 \>)​

场景:仅匹配完整单词 “user”,排除 “username”“user123” 等包含该字符串的行。​

TypeScript

取消自动换行复制

grep "\<user\>" users.txt​

对比测试:若不使用单词边界,grep "user" users.txt会同时匹配user account、username is等行,而\<user\>确保只匹配独立的 “user” 单词。​

2. 扩展正则表达式(ERE,-E 选项)​

匹配可选字符(?)​

场景:匹配 “http” 或 “https” 开头的 URL。​

TypeScript

取消自动换行复制

grep -E "^http(s)?://" urls.txt​

解释:^表示行首,(s)?表示 “s” 字符可选(出现 0 次或 1 次),相比基本正则表达式^http\(s\)?://,扩展正则表达式无需对括号和问号转义,语法更简洁。​

匹配重复字符(+ 和 *)​

场景:提取文本中连续的数字字符串(如电话号码、金额)。​

TypeScript

取消自动换行复制

grep -oE "[0-9]+" numbers.txt​

区别:+表示匹配一个或多个前面的字符(此处为数字),*表示匹配零个或多个,例如[0-9]*会匹配空字符串或数字串。​

六、递归搜索目录的应用与技巧​

1. 递归搜索当前目录下所有文件​

场景:在项目代码目录/home/user/project中查找包含 “TODO” 注释的所有代码文件。​

TypeScript

取消自动换行复制

grep -r "TODO" /home/user/project​

执行过程:grep 会遍历/home/user/project目录及其子目录下的所有文件,对每个文件执行搜索操作,输出所有包含 “TODO” 的行及文件名和行号。​

2. 递归搜索并仅列出文件名​

场景:查找/var/log目录中包含 “error” 的日志文件列表。​

TypeScript

取消自动换行复制

grep -rl "error" /var/log​

优势:相比输出所有匹配行,-l选项仅列出文件名,方便后续批量处理文件,如统一压缩或备份包含错误信息的日志文件。​

3. 递归搜索并排除特定文件类型​

场景:在目录中查找包含 “config” 的文件,但排除.log文件。​

TypeScript

取消自动换行复制

grep -r "config" /path/to/dir/ | grep -v "\.log$"​

组合技巧:通过管道将递归搜索结果传递给第二个grep,利用-v反向匹配排除以 “.log” 结尾的行,实现精准筛选。​

七、结合管道(|)与其他命令的高级应用​

1. 过滤进程信息​

场景:查找正在运行的apache2进程,同时排除grep自身进程。​

TypeScript

取消自动换行复制

ps -ef | grep apache2 | grep -v grep​

原理:第一个grep筛选出包含 “apache2” 的进程信息,第二个grep排除包含 “grep” 的行(即grep命令自身的进程),确保结果仅为真实的apache2进程。​

2. 统计唯一匹配项数量​

场景:统计日志中出现的不同 IP 地址数量。​

TypeScript

取消自动换行复制

grep "IP:" access.log | awk '{print $2}' | sort -u | wc -l​

分步解析:​

  1. grep "IP:" access.log提取包含 “IP:” 的行;​
  1. awk '{print $2}'通过 awk 命令提取每行的第二个字段(假设 IP 地址在第二列);​
  1. sort -u对 IP 地址进行排序并去重;​
  1. wc -l统计去重后的 IP 地址行数,得出唯一 IP 数量。​

3. 文本预处理与筛选​

场景:从系统服务列表中提取正在运行的服务名称。​

TypeScript

取消自动换行复制

systemctl list-units --type=service | grep "active" | awk '{print $1}'​

流程:先获取所有服务单元信息,再筛选出状态为 “active” 的服务行,最后提取服务名称字段,便于监控系统服务状态。​

八、注意事项与常见问题解决方案​

1. 正则表达式转义问题​

问题:使用基本正则表达式时,对$、*、+等特殊字符未转义导致匹配失败。​

解决方案:对特殊字符添加反斜杠\进行转义,例如匹配以数字结尾的行应使用grep "[0-9]\$" file.txt。若使用扩展正则表达式(-E),部分字符无需转义,可简化语法。​

2. 大文件处理性能瓶颈​

问题:搜索超大文件(如 GB 级日志)时,命令执行缓慢甚至卡死。​

解决方案:​

  • 尽量缩小搜索范围,指定具体文件名而非目录;​
  • 使用-m选项限制匹配行数(如grep -m 100 "error" huge.log,找到 100 个匹配行后停止);​
  • 结合split命令将大文件分割成小文件后再搜索。​

3. 目录权限不足​

问题:普通用户递归搜索系统目录(如/etc)时提示权限不足。​

解决方案:使用sudo获取管理员权限,如sudo grep -r "network" /etc/,或联系管理员调整文件权限。​

4. 正则表达式复杂度过高​

问题:复杂正则表达式导致匹配逻辑错误或效率低下。​

解决方案:​

  • 将复杂表达式拆分为多个简单步骤,通过管道组合;​
  • 使用在线正则表达式测试工具(如regex101.com)验证表达式正确性;​
  • 优先使用固定字符串匹配(-F选项)替代复杂正则,提高性能。​

九、命令行快捷键与效率提升技巧​

  1. 历史命令调用:使用Arrow Up和Arrow Down箭头键在命令历史中上下滚动,快速找回之前执行过的grep命令;也可通过Ctrl + R输入关键字搜索历史命令。​
  1. 命令补全:按Tab键自动补全文件名或目录名,减少手动输入,尤其在长路径或复杂文件名场景下。​
  1. 快速终止:当搜索耗时过长或需中断时,按Ctrl + C强制终止grep进程。​
  1. 后台运行:对于耗时较长的递归搜索任务,可使用&符号将命令放入后台运行(如grep -r "pattern" /large/dir/ &),并通过jobs命令查看后台任务状态,fg命令将任务切换到前台。​

这份笔记全面覆盖了 CentOS 7 中 grep 命令的使用。若你在实际操作中遇到特定问题,或想了解某类复杂场景的处理,欢迎随时和我分享。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)

uniappx插件nutpi-idcard 开发与使用指南&#xff08;适配鸿蒙&#xff09; 前言 nutpi-idcard 是一个基于 UTS (uni-app TypeScript Syntax) 开发的 uni-app 插件适配鸿蒙&#xff0c;主要用于解析身份证号码&#xff0c;提取其中的关键信息&#xff0c;如地区、出生日期、性…

Grafana-ECharts应用讲解(玫瑰图示例)

工具: MySQL 数据库 MySQL Workbench 数据库管理工具(方便编辑数据) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安装 安装 MySQL社区版安装 MySQL Workbench安装 Grafana在 Grafana 插件中搜索 Business Charts 进行安装以上安装步骤网上教程很多,自行搜…

React状态管理Context API + useReducer

在 React 中&#xff0c;Context API useReducer 是一种轻量级的状态管理方案&#xff0c;适合中小型应用或需要跨组件共享复杂状态的场景。它避免了 Redux 的繁琐配置&#xff0c;同时提供了清晰的状态更新逻辑。 1. 基本使用步骤 (1) 定义 Reducer 类似于 Redux 的 reduce…

3 个优质的终端 GitHub 开源工具

1、Oh My Zsh Oh My Zsh 是一个帮助你管理和美化 zsh 终端的开源工具。它让你的终端更炫酷、更高效。安装后&#xff0c;你可以快速使用各种插件和主题&#xff0c;比如常见的 git 命令简化、支持多种编程语言工具等&#xff0c;每次打开终端都会有惊喜。无论你是开发者还是普…

无人机巡检智能边缘计算终端技术方案‌‌——基于EFISH-SCB-RK3588工控机/SAIL-RK3588核心板的国产化替代方案‌

一、方案核心价值‌ ‌实时AI处理‌&#xff1a;6TOPS NPU实现无人机影像的实时缺陷检测&#xff08;延迟&#xff1c;50ms&#xff09;‌全国产化‌&#xff1a;芯片、操作系统、算法工具链100%自主可控‌极端环境适配‌&#xff1a;-40℃~85℃稳定运行&#xff0c;IP65防护等…

SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)

官方文档&#xff1a;Chat Memory :: Spring AI Reference 1. 引言 SpringAI 1.0.0 改动了很多地方&#xff0c;本文根据官方的InMemoryChatMemoryRepository实现了自定义的RedisChatMemoryRepository&#xff0c;并使用MessageWindowChatMemory创建ChatMemory 2. 实现 2.1.…

RFC8489-STUN

0. 学习参考 RFC5389 中文翻译 中文RFC RFC文档 RFC翻译 RFC中文版 RFC 5389&#xff1a;NAT 的会话遍历实用程序 &#xff08;STUN&#xff09; --- RFC 5389: Session Traversal Utilities for NAT (STUN) 1. RFC 3489的演变 自 RFC 3489 发布以来的经验发现&#xff0c;…

开始在本地部署自己的 Gitea 服务器

0.简介 在软件开发和团队协作中&#xff0c;代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅&#xff0c;这个软件已经很久没有更新了。经过多方考察&#xff0c;发现Gitea 是一款轻量级的开源代码托管平台&#xff0c;具有易于部署、资源占用少、功能丰富…

Xsens-AAA工作室品质,为动画师准备

每一帧都讲述着一个故事&#xff0c;当动作真实呈现时&#xff0c;故事便鲜活起来。我们打造并改进了 Xsens Animate&#xff0c;助力专业人士突破数字动画的界限。 通过升级后的 Xsens Animate&#xff0c;您可以获得女性和男性解剖模型以及更精确的运动引擎&#xff0c;从一…

嵌入(Embedding)技术的实现原理与应用场景解析

嵌入&#xff08;Embedding&#xff09;技术的实现原理与应用场景解析 引言&#xff1a;从One-Hot到语义空间 在自然语言处理的演进历程中&#xff0c;嵌入技术&#xff08;Embedding&#xff09;的诞生标志着一个重要转折点——它让离散的符号表示突破了维度诅咒&#xff0c…

金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步

目录 一.同步场景与方案选型 二.什么是KES 三.同步环境配置 1.前置条件验证 2.逻辑解码配置 四.同步实施与问题排查 1.结构映射规则 2.增量数据捕获 3.数据一致性校验 五.性能调优实践 1.同步线程优化 2.批量提交优化 3.资源监控指标 六.典型场景解决方案 1.双向…

开源语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

开源语义分割工具箱mmsegmentation安装环境 文章目录 1、下载数据集2、整理数据集3、下载预训练模型4、测试5、训练模型参考官方数据处理步骤 https://github.com/open-mmlab/mmsegmentation/blob/main/docs/zh_cn/user_guides/2_dataset_prepare.md#loveda 数据集类别标签:…

Python概率统计可视化——概率分布、假设检验与分子运动模型

Python概率统计可视化——概率分布、假设检验与分子运动模型 前言 概率统计作为描述不确定性和随机现象的数学工具&#xff0c;广泛应用于物理学、生物学、经济学等领域。然而&#xff0c;抽象的概率分布和统计推断过程往往难以直观理解。可视化技术通过将概率密度、假设检验逻…

NLP学习路线图(二十二): 循环神经网络(RNN)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;序列数据是绝对的核心——无论是流淌的文本、连续的语音还是跳跃的时间序列&#xff0c;都蕴含着前后紧密关联的信息。传统神经网络如同面对一幅打散的拼图&#xff0c;无法理解词语间的顺序关系&#xff0c…

禅道5月更新速览 | 新增交付物配置功能,支持建立跨执行任务依赖关系,研发效能平台上线

禅道体验又升级啦&#xff01;禅道5月新功能合集来啦&#xff0c;研发效能平台与大家见面啦&#xff01; 我们将继续坚持&#xff0c;月月有大招&#xff0c;迭代不停歇&#xff0c;快来更新禅道&#xff0c;体验全新的项目管理工具吧~ ​

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!

PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介绍&#x1f973; 主要功能&#x1f92a; 软件使用&#x1f92a; 参数解释&#x1f92a; 关键代码&#x1f929; 项…

kubeadm安装k8s

1、环境准备 1.1、升级系统内核 参考另一篇文章&#xff1a;https://blog.csdn.net/u012533920/article/details/148457715?spm1011.2415.3001.5331 1.2、设置Hostname cat <<EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos…

Vue基础(14)_列表过滤、列表排序

Array.prototype.filter()【ES5】 filter() 方法创建给定数组一部分的浅拷贝&#xff0c;其包含通过所提供函数实现的测试的所有元素。 语法&#xff1a; filter(callbackFn) filter(callbackFn, thisArg) 参数&#xff1a; callbackFn(回调函数)&#xff1a;为数组中的每个元…

ComfyUI 中如何使用 Depth ControlNet SD1.5

目录 SD1.5 Depth ControlNet 简介 Depth ControlNet 主要特点 SD1.5 Depth ControlNet工作流准备工作 1. 安装必要插件 方式一:使用 ComfyUI Manager(推荐) 方式二:通过 git 安装必要插件 方式三:手动安装(不推荐) 2.1 下载工作流所需模型 2.2 模型存放位置 SD…

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…