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

Linux grep 命令详解:常用选项、参数及实战场景

一、grep 命令简介
`grep`(Global Regular Expression Print)是 Linux 中用于文本搜索的核心工具,支持正则表达式,能快速定位文件中的目标内容。

 二、常用选项(Options)及英文对照
| 选项 | 英文全称 | 作用 |
|------|----------|------|
| `-i` | `--ignore-case` | 忽略大小写 |
| `-c` | `--count` | 统计匹配行数 |
| `-n` | `--line-number` | 显示行号 |
| `-o` | `--only-matching` | 仅输出匹配内容 |
| `-A` | `--after-context=N` | 显示匹配行后 N 行 |
| `-B` | `--before-context=N` | 显示匹配行前 N 行 |
| `-C` | `--context=N` | 显示匹配行前后各 N 行 |
| `-r` | `--recursive` | 递归搜索目录 |
| `-w` | `--word-regexp` | 匹配完整单词 |
| `-E` | `--extended-regexp` | 启用扩展正则表达式 |

三、实战场景与示例

1. 统计文件中 `error` 出现的次数(忽略大小写)

说明:统计 `app.log` 中所有包含 `error` 的行数(不区分大小写)。

命令:

grep -i -c 'error' app.log

2. 搜索压缩文件中的特定 JSON 字符串
说明:
在 `logs.zip` 压缩包中搜索包含 `系统忙,请稍后再试' 的文件,并统计匹配次数。
命令:


zgrep -o -c '系统忙,请稍后再试' *.zip
# 注意:`zgrep` 是专门用于搜索压缩文件的工具
 

3. 显示关键词前后两行的上下文
 说明:
在 `debug.log` 中搜索 `ConnectionTimeout` 并显示匹配行及其前后各 2 行的内容。
 命令:


grep -C 2 'ConnectionTimeout' debug.log
#注意:C是大写的,如果想要看前两行用-B  2,后3行 -A 3

4. 统计时间段内字符串的出现次数
 说明:
在 `access.log` 中统计 `2023-10-01 14:00` 至 `2023-10-01 15:00` 内 `GET /api/user` 的请求次数。
命令:


awk '/2023-10-01 14:[0-5][0-9]/ && /2023-10-01 15:00/ && /GET \ /api\ /user/ {count++} END {print count}' access.log
说明:结合 `awk` 处理时间范围
 

4.1 查询日志按时间排序,可以先用 sed 提取时间段内的行,再通过 grep 统计字符串:
sed -n '/00:00:00/,/01:55:00/p' info.log | grep -c 'GET\  \/api\/user' 

 四、更多高频用法

 1. 递归搜索目录并显示行号
 说明:
在 `/var/log` 目录及其子目录中递归搜索 `Permission denied`,并显示文件名和行号。
命令:

grep -r -n "Permission denied" /var/log

 2. 精确匹配单词(避免部分匹配)
说明:
在 `config.txt` 中匹配完整的单词 `port`(避免匹配 `export` 或 `portal`)。
命令:

grep -w 'port' config.txt

五、注意事项
1. **正则表达式转义**:若搜索内容包含特殊字符(如 `.`、`*`),需用 `\` 转义。  
  

grep "192\.168\.1\.1" access.log



2. 性能优化:大文件搜索时,可结合 `-m NUM` 限制匹配次数。

 六、总结
掌握 `grep` 的常用选项和组合技巧,能大幅提升日志分析、故障排查的效率。灵活运用正则表达式和上下文控制选项,可覆盖绝大多数文本搜索场景!

推荐工具:  
- 复杂正则表达式测试:[RegExr](https://regexr.com/)  
- 日志分析进阶:`awk`、`sed`

希望这篇博客能帮助您快速掌握 `grep` 的核心用法!如果有其他问题,欢迎评论区交流! 🚀

http://www.xdnf.cn/news/7433.html

相关文章:

  • 基于SpringBoot的家政预约系统
  • 以下是 MySQL 中常用到的 英语单词和词组 的全面分类整理,涵盖数据库操作、SQL语句、函数、配置等核心内容
  • 监控易:一体化集成平台,打破运维壁垒
  • 通过子接口(Sub-Interface)实现三层接口与二层 VLAN 接口的通信
  • bat 批处理获取日期、时间
  • vue3自适应高度超出折叠功能
  • 【DNS寻址之旅】从敲下网址到网页呈现:DNS的“第一次亲密接触”**
  • 聊聊更新中断和更新事件那些事儿
  • 【C++】不推荐使用的std::allocator<void>
  • 对于程序员的个人理解
  • 机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征
  • 【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025
  • 【STM32】ST-Link V2.1制作
  • 软件工程第六章-详细设计
  • Git 使用全攻略:从入门到精通
  • 牛客网NC209794:使徒袭来
  • 2025年PMP 学习二十一 14章 项目立项管理
  • 系统安全及应用深度笔记
  • (已解决:基于WSL2技术)Windows11家庭中文版(win11家庭版)如何配置和使用Docker Desktop
  • Java大数据机器学习模型在金融衍生品风险建模中的创新实践
  • 【Unity网络编程知识】Unity的 WWW相关类学习
  • 【免费下载】2025年全国地铁路线及站点矢量数据
  • 关于IntegerCache.cache的介绍
  • 【密码学——基础理论与应用】李子臣编著 第十二章 SM3密码杂凑算法 课后习题
  • Ubuntu 远程桌面配置指南
  • 数据要素及征信公司数据要素实践
  • 探究:霍尔开关,在电动晾衣架丝滑升降与卷发器智能温控中的关键作用
  • 已解决——如何让网站实现HTTPS访问?
  • 前端页面 JavaScript数据交互
  • 鸿蒙 系统-安全-程序访问控制-应用权限管控