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

Linux 【08-grep命令超详细教程】

Linux grep 完整详细教程

# 查询最近的 1 次异常grep-i"error\|exception\|fail"app.log|tail-1

一、grep 基础介绍

grep全称Global Regular Expression Print,全局正则表达式打印,作用:在文件/标准输入中匹配文本行并输出
语法:

grep[选项]"匹配模式"文件名# 管道用法命令|grep[选项]"匹配模式"

二、常用核心选项(高频必记)

参数作用
-i忽略大小写匹配
-n输出匹配行的行号
-v反向匹配,输出不匹配的行
-c只输出匹配到的行数(计数)
-o只打印匹配到的字符串本身,不输出整行
-l只输出包含匹配内容的文件名
-L只输出不包含匹配内容的文件名
-w精确匹配完整单词(避免部分匹配)
-x整行完全匹配
-A N匹配行 + 后N行(After)
-B N匹配行 + 前N行(Before)
-C N匹配行 + 前后各N行(Context)
-r / -R递归遍历目录下所有文件,-R会处理软链接
-h多文件匹配时,不打印文件名
-q静默模式,无输出,只返回退出码(脚本判断用)
-E使用扩展正则(等价egrep
-F纯文本匹配,不解析正则(等价fgrep

三、基础实操示例

1. 简单字符串匹配

# 在 test.txt 查找包含 error 的行grep"error"test.txt# 管道过滤命令输出,查看端口80进程netstat-tulpn|grep80# 查看nginx进程ps-ef|grepnginx

2. 忽略大小写-i

grep-i"Error"log.txt# Error、ERROR、error 都会匹配

3. 显示行号-n

grep-n"warn"app.log# 输出格式:12:xxx warn xxx

4. 反向过滤-v

# 过滤掉注释行(#开头)grep-v"^#"nginx.conf# 排除空行grep-v"^$"nginx.conf

5. 统计匹配行数-c

# 统计报错日志总数grep-c"ERROR"app.log

6. 只输出匹配到的字符-o

# 提取所有数字grep-o"[0-9]+"test.txt

7. 精确单词匹配-w

文件内容:test test123

grep"test"test.txt# 两行都匹配grep-w"test"test.txt# 只匹配独立单词 test,忽略 test123

8. 显示上下文行 A/B/C

# 匹配error,同时显示前后2行grep-C2"error"app.log# 只显示匹配行后3行grep-A3"Exception"app.log# 只显示匹配行前3行grep-B3"Exception"app.log

9. 递归搜索目录-r

# 在 /var/log 下所有文件搜索 "fail"grep-r"fail"/var/log# 只输出包含关键词的文件名grep-rl"root"/etc# 忽略大小写递归搜索grep-ri"mysql"/home

10. 静默模式-q(shell脚本专用)

ifgrep-q"127.0.0.1"/etc/hosts;thenecho"存在本地host"fi# $? 退出码:0=匹配成功,1=无匹配,2=文件不存在

四、正则表达式匹配(grep 默认基础正则)

基础正则元字符

符号含义
.匹配任意单个字符
*匹配前面字符 0次或多次
^行开头
$行结尾
[]字符集[0-9] [a-z] [A-Z]
[^]取反字符集[^0-9]非数字
\转义符,取消元字符特殊含义
\{m,n\}匹配 m~n 次(基础正则需转义大括号)

扩展正则-E(推荐,不用大量转义)

-Eegrep+ ? () {}无需转义

# 匹配手机号 1开头,11位数字grep-E"1[0-9]{10}"test.txt# 匹配 ip 简单规则grep-E"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"# 匹配 a 或 bgrep-E"error|warn"log.txt

常用正则实战案例

  1. 匹配以 # 开头注释行
grep"^#"nginx.conf
  1. 匹配空行
grep"^$"nginx.conf
  1. 匹配以 error 结尾的行
grep"error$"app.log
  1. 匹配包含数字的行
grep"[0-9]"test.txt
  1. 匹配纯数字整行
grep-x"[0-9]+"test.txt
  1. 匹配邮箱简单规则
grep-E"[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]+"
  1. 匹配多个关键词(或)
# 方式1 -E 扩展正则 | 或grep-E"timeout|refuse|down"log# 方式2 多 grep 管道grep"timeout"log|grep"refuse"# 同时包含两个关键词(且)# 方式3 多个 -e 参数grep-e"error"-e"fail"log

五、纯文本匹配-F避免正则干扰

当匹配内容包含. * \ [] ()等符号时,不想被解析成正则,用-F

# 查找包含 www.baidu.com 的行,.不会被当作任意字符grep-F"www.baidu.com"test.txt# 等价 fgrepfgrep"www.baidu.com"test.txt

六、多文件匹配规则

  1. 多个文件同时查找
grep"root"/etc/passwd /etc/group# 输出格式:文件名:匹配行
  1. 多文件不显示文件名-h
grep-h"root"/etc/passwd /etc/group
  1. 只输出有匹配的文件名-l
grep-l"root"/etc/*

七、grep 高级实用技巧

1. 排除目录递归搜索--exclude-dir

递归搜索时跳过指定文件夹

# 搜索 /etc 下所有文件,排除 /etc/ssl 目录grep-r"listen"/etc --exclude-dir=ssl# 排除多个目录grep-r"listen"/etc --exclude-dir={ssl,systemd}

2. 排除指定后缀文件--exclude

# 递归搜索,跳过 .log .tmp 文件grep-r"mysql"/home--exclude=*.{log,tmp}

3. 只搜索指定后缀--include

# 只匹配 .conf 配置文件grep-r"port"/etc--include=*.conf# 匹配 .sh .py 脚本grep-r"print"./--include=*.{sh,py}

4. 结合 find 批量过滤文件

# 查找所有 .log 文件并搜索 errorfind/var/log-name"*.log"-execgrep-n"ERROR"{}\;

5. 过滤进程避免 grep 自身

执行ps | grep nginx会出现grep nginx这条进程,过滤掉:

ps-ef|grepnginx|grep-vgrep# 或者正则优化ps-ef|grep[n]ginx

6. 彩色高亮匹配(默认自带)

大部分系统默认开启高亮,无颜色手动加--color=auto

grep--color=auto"error"app.log# 永久生效写入 ~/.bashrcecho"alias grep='grep --color=auto'">>~/.bashrcsource~/.bashrc

八、grep 退出码(shell脚本判断)

执行后echo $?查看返回值:

  • 0:找到匹配内容
  • 1:无匹配内容
  • 2:文件不存在/语法错误

示例脚本判断:

#!/bin/bashifgrep-q"8080"/etc/nginx/conf.d/default.confthenecho"端口8080已配置"elseecho"未找到8080端口"fi

九、egrep / fgrep 区别总结

  1. grep:基础正则,+ ? | () {}需要转义\
  2. egrep = grep -E:扩展正则,无需转义,日常推荐
  3. fgrep = grep -F:纯文本,完全不解析正则符号,匹配特殊字符串首选

十、高频综合命令速查表

# 1. 查看日志报错+前后3行grep-C3-i"error"app.log# 2. 递归查找代码中包含 redis 的 .java 文件grep-r"redis"./src--include=*.java-n# 3. 过滤配置文件有效内容(去掉注释、空行)grep-v"^#"nginx.conf|grep-v"^$"# 4. 统计日志报错行数grep-c"ERROR"app.log# 5. 查找所有包含root的文件并只打印文件名grep-rl"root"/etc# 6. 匹配多个关键词 error 或 timeoutgrep-E"error|timeout"app.log# 7. 提取所有IP地址grep-oE"([0-9]{1,3}\.){3}[0-9]{1,3}"access.log


在 Linux 下使用grep查询日志中的异常数据,并筛选最近 1 次最近 n 次,核心思路是:

  1. 先过滤出异常行
  2. 再取尾部最新数据

1. 查询最近的 1 次异常

grep-i"error\|exception\|fail"app.log|tail-1

或者如果日志有明确时间戳且按时间顺序追加:

tacapp.log|grep-i-m1"error\|exception\|fail"

tac是倒序读取,-m1表示匹配到第一个就停止。


2. 查询最近的 n 次异常(例如 10 次)

grep-i"error\|exception\|fail"app.log|tail-10

倒序方式(最新在前):

tacapp.log|grep-i-m10"error\|exception\|fail"

3. 同时显示行号(便于定位)

grep-n-i"error"app.log|tail-5

4. 按时间段过滤后再取最近 N 次

如果日志格式带时间,比如2026-07-01 10:...

grep"2026-07-01"app.log|grep-i"error"|tail-3

5. 常用关键词匹配异常(可自定义)

grep-E"ERROR|FATAL|Exception|Timeout|Connection refused"app.log|tail-20

6. 查看最近 N 次异常并显示上下文(推荐排查)

grep-B2-A5-i"error"app.log|tail-30
  • -B2:匹配行前 2 行
  • -A5:匹配行后 5 行

7. 实时监控最新异常(动态)

tail-fapp.log|grep--line-buffered-i"error"

如果你能告诉我:

  • 日志格式(有无时间戳)
  • 异常关键词
  • 是查询文件还是journalctl/kubectl logs
http://www.jsqmd.com/news/1110393/

相关文章:

  • 企业微信二次开发API 项目中的数据权限:按员工、部门还是业务线控制
  • 大模型稀疏激活真相:MoE参数量、2%激活率与工程实践
  • 遗传算法求解N皇后问题的Python实操指南
  • 2026深度实测:两款主流AI编程工具vibe coding能力全对比
  • 工业4-20mA电流环技术及STM32与DAC161S997实现方案
  • Playnite游戏库管理器:终极一站式游戏管理解决方案
  • Windows系统文件bcryptprimitives.dll丢失找不到问题解决
  • 大电流FOC控制:A89307与TM4C123的BLDC电机精准驱动方案
  • 【AI演进史】从图灵测试到Agent时代:一部人工智能的跌宕七十年
  • Mac电脑查看端口号占用
  • 3步快速上手HunterPie:怪物猎人世界最强辅助工具使用指南
  • 一键解锁九大网盘下载限制:LinkSwift网盘直链下载助手终极指南
  • AI编排实战:MuleSoft+LangChain构建企业级AI集成架构
  • 如何使用ChatIG Python SDK快速集成AI能力
  • 如何选择最适合你的多协议下载器?Gopeed全平台解决方案详解
  • 20+专业钓鱼邮件模板生成器:PhishMailer安全研究工具详解
  • 消息通知设计
  • Python编程视频索引
  • LLM推理架构归零:Anthropic端到端重写机制实战解析
  • E10自定义浏览框配置
  • RAGate:面向对话AI的自适应RAG决策框架
  • Agentic RAG重构:从检索生成二分到人机协同闭环
  • SPA 写累了?试试 LiveView:服务端管状态,前端不写 JS
  • Mythos门控能力解析:网状推理与跨文档验证技术突破
  • Codex 第三方工具迁移配置教程
  • Sqribble文档自动化原理:结构化模板驱动的PDF出版流水线
  • AAV肠道靶向研究如何选择启动子?
  • 如何3步搞定30+文档平台下载难题?kill-doc文档下载神器完全指南
  • 多目标强化学习在机场登机口智能调度中的应用
  • 昆山企业同城流量难做?GEO 工具 + 本地化代优化一站式解决方案