Linux 日志分析实战:grep 组合 awk/sed 实现 5 类复杂多关键字过滤
Linux 日志分析实战grep 组合 awk/sed 实现 5 类复杂多关键字过滤日志分析是每个运维工程师和开发者的必修课。当服务器出现异常时我们需要快速从海量日志中定位问题当业务出现波动时我们需要从访问日志中分析用户行为。而 grep、awk 和 sed 这三大文本处理神器正是解决这些问题的瑞士军刀。本文将带你深入实战通过 5 个典型场景展示如何组合这些命令实现复杂过滤。不同于基础教程只讲解单一命令我们聚焦于工具间的协作解决真实工作中的日志分析难题。1. 基础准备理解 grep 的三种匹配模式在开始组合命令前我们需要夯实基础。grep 支持三种正则表达式语法这直接影响我们如何编写匹配模式# 基本正则表达式(BRE) - 需要转义特殊字符 grep error\|warning /var/log/syslog # 扩展正则表达式(ERE) - 不需要转义 grep -E error|warning /var/log/syslog # Perl兼容正则(PCRE) - 功能最强大 grep -P \d{4}-\d{2}-\d{2} /var/log/nginx/access.log关键区别BRE 中|、、?等元字符需要转义ERE 中这些元字符可以直接使用PCRE 支持更复杂的特性如向前向后断言提示在性能敏感的场景BRE 通常比 ERE 和 PCRE 更快因为它的匹配算法更简单。2. 多条件过滤实现与、或、非逻辑实际工作中我们很少只需要匹配单个关键词。更常见的是需要组合多个条件的复杂查询。2.1 或逻辑OR - 匹配任意条件查找包含 error、warning 或 critical 的日志行# 基本正则写法需要转义| grep error\|warning\|critical /var/log/syslog # 扩展正则写法更清晰 grep -E error|warning|critical /var/log/syslog # 等价于 egrep error|warning|critical /var/log/syslog2.2 与逻辑AND - 必须同时满足查找同时包含 failed 和 connection 的行grep failed /var/log/nginx/error.log | grep connection这种管道方式会先筛选包含 failed 的行再从结果中筛选包含 connection 的行。2.3 非逻辑NOT - 排除特定内容查找包含 error 但不包含 timeout 的行grep error /var/log/syslog | grep -v timeout-v参数表示反向匹配即排除匹配的行。3. 上下文提取显示匹配行前后的内容单纯看到匹配行往往不够我们需要上下文来理解日志的完整场景。# 显示匹配行及其后5行 grep -A 5 panic /var/log/kern.log # 显示匹配行及其前3行 grep -B 3 segmentation fault /var/log/syslog # 显示匹配行及其前后各2行 grep -C 2 Out of memory /var/log/messages参数说明-A NUM显示匹配行后的 NUM 行After-B NUM显示匹配行前的 NUM 行Before-C NUM显示匹配行前后各 NUM 行Context4. 高级过滤结合 awk 进行字段级处理当需要基于特定字段进行过滤时awk 比 grep 更加强大。考虑这个 Nginx 访问日志片段192.168.1.1 - - [10/Oct/2023:14:32:01 0800] GET /api/user HTTP/1.1 200 1234 192.168.1.2 - - [10/Oct/2023:14:32:02 0800] POST /api/login HTTP/1.1 401 5674.1 查找状态码为 500 的请求awk $9 500 {print} /var/log/nginx/access.log4.2 查找 POST 请求且响应时间大于 1 秒的请求假设日志中包含响应时间如 $request_timeawk $6 \POST $(NF-1) 1 {print} /var/log/nginx/access.log4.3 结合 grep 和 awk 进行复杂过滤查找包含 api 的 URL 且状态码为 4xx 或 5xx 的请求grep /api/ /var/log/nginx/access.log | awk $9 ~ /^[45][0-9]{2}$/5. 实战案例Nginx 访问日志分析脚本下面是一个完整的 Nginx 日志分析脚本综合运用了 grep、awk、sort 和 uniq#!/bin/bash LOG_FILE/var/log/nginx/access.log # 1. 统计最频繁的10个IP echo Top 10 IPs: awk {print $1} $LOG_FILE | sort | uniq -c | sort -nr | head -10 # 2. 统计最频繁的10个URL echo -e \nTop 10 URLs: awk -F {print $2} $LOG_FILE | awk {print $2} | sort | uniq -c | sort -nr | head -10 # 3. 统计不同状态码的数量 echo -e \nStatus code statistics: awk {print $9} $LOG_FILE | sort | uniq -c | sort -nr # 4. 统计5xx错误的请求 echo -e \n5xx Errors: grep -E 5[0-9]{2} $LOG_FILE | awk -F {print $2 - $1} # 5. 查找可疑扫描行为频繁404 echo -e \nPossible scanners (frequent 404s): awk $9 404 {print $1 - $7} $LOG_FILE | sort | uniq -c | sort -nr | head -5脚本功能统计访问最频繁的客户端IP找出最常访问的URL分析不同HTTP状态码的分布提取所有5xx服务器错误检测可能的恶意扫描行为频繁4046. 性能优化处理大型日志文件的技巧当日志文件很大时GB级别命令的效率变得至关重要。以下是一些实用技巧使用 LC_ALLC临时设置区域设置为C可显著加快grep速度LC_ALLC grep error huge.log减少管道数量每个管道都会创建新进程影响性能# 较差 - 多个管道 cat huge.log | grep error | grep -v debug # 更好 - 单个grep完成 grep error huge.log | grep -v debug # 最佳 - 使用awk一次性处理 awk /error/ !/debug/ huge.log使用更快的替代工具ag(The Silver Searcher)比grep更快ripgrep(rg)现代高效的文本搜索工具并行处理使用GNU parallel处理超大文件cat huge.log | parallel --pipe grep error注意在处理生产环境日志时始终先在日志备份或测试环境验证命令避免意外修改或删除重要数据。

相关新闻

Linux echo 命令 5 个高级转义符实战: 退格、
 回车的 3 种脚本应用

Linux echo 命令 5 个高级转义符实战: 退格、 回车的 3 种脚本应用

Linux echo命令高级转义符实战:退格、回车的3种脚本应用1. 转义符速查与核心原理在Linux终端交互和脚本编写中,echo -e的转义字符能实现光标控制、文本特效等高级功能。以下是5个关键转义符的速查表:转义符作用描述ASCII码典型应用场景\b退格…

2026/7/6 12:06:02阅读更多 →
Bash 环境变量与 PATH 配置:Ubuntu 22.04 下 5 个实用自定义技巧

Bash 环境变量与 PATH 配置:Ubuntu 22.04 下 5 个实用自定义技巧

Bash 环境变量与 PATH 配置:Ubuntu 22.04 下 5 个实用自定义技巧对于开发者而言,熟练使用 Bash 环境变量是提升 Linux 工作效率的关键技能。本文将深入探讨 Ubuntu 22.04 中环境变量的核心机制,特别是 PATH 变量的配置技巧,并通过…

2026/7/6 12:06:02阅读更多 →
Linux top/htop 命令实战:5分钟定位CPU占用超80%的异常进程

Linux top/htop 命令实战:5分钟定位CPU占用超80%的异常进程

Linux性能排查实战:5分钟锁定CPU占用超80%的异常进程当服务器CPU使用率突然飙升时,每个运维工程师都经历过那种如坐针毡的紧迫感。面对监控系统的告警通知,如何在最短时间内精准定位问题源头?本文将分享一套经过实战检验的排查流程…

2026/7/6 12:01:01阅读更多 →
ZheTian进阶技巧:如何结合Cobalt Strike和MSF进行高级利用

ZheTian进阶技巧:如何结合Cobalt Strike和MSF进行高级利用

ZheTian进阶技巧:如何结合Cobalt Strike和MSF进行高级利用 【免费下载链接】ZheTian ::ZheTian / 强大的免杀生成工具,Bypass All. 项目地址: https://gitcode.com/gh_mirrors/zh/ZheTian ZheTian是一款强大的免杀生成工具,能够帮助安…

2026/7/6 16:26:55阅读更多 →
KMR221与PIC18LF47K42实现高精度电源管理方案

KMR221与PIC18LF47K42实现高精度电源管理方案

1. 项目背景与核心价值在嵌入式系统和电源管理领域,精确的电压控制一直是工程师面临的挑战。传统方案要么精度不足,要么成本高昂。而结合KMR221同步降压转换器和PIC18LF47K42微控制器的方案,恰好在这两个维度上取得了平衡。我最近为一个工业传…

2026/7/6 16:26:55阅读更多 →
STM32与EEPROM在工业数据存储中的优化实践

STM32与EEPROM在工业数据存储中的优化实践

1. 项目背景与核心需求 在嵌入式系统开发中,数据存储的可靠性往往决定了整个系统的稳定性。我最近接手了一个工业级数据采集项目,需要记录设备运行时的关键参数(如温度、振动、电流等),这些数据即使在断电后也必须完整…

2026/7/6 16:26:55阅读更多 →
终极优化:MiMo-V2.5-DFlash量化配置与性能调优技巧

终极优化:MiMo-V2.5-DFlash量化配置与性能调优技巧

终极优化:MiMo-V2.5-DFlash量化配置与性能调优技巧 【免费下载链接】MiMo-V2.5-DFlash 项目地址: https://ai.gitcode.com/XiaomiMiMo/MiMo-V2.5-DFlash MiMo-V2.5-DFlash作为小米推出的高性能AI模型,通过科学的量化配置与性能调优,能…

2026/7/6 16:26:55阅读更多 →
Intellij-Erlang中的代码补全:从BIFs到自定义类型的智能提示终极指南

Intellij-Erlang中的代码补全:从BIFs到自定义类型的智能提示终极指南

Intellij-Erlang中的代码补全:从BIFs到自定义类型的智能提示终极指南 【免费下载链接】intellij-erlang Erlang IDE 项目地址: https://gitcode.com/gh_mirrors/in/intellij-erlang Intellij-Erlang作为强大的Erlang IDE,为开发者提供了智能化的代…

2026/7/6 16:26:55阅读更多 →
three.quarks时间控制终极指南:慢动作与时间缩放效果完全教程

three.quarks时间控制终极指南:慢动作与时间缩放效果完全教程

three.quarks时间控制终极指南:慢动作与时间缩放效果完全教程 【免费下载链接】three.quarks Three.quarks is a general purpose particle system / VFX engine for three.js 项目地址: https://gitcode.com/GitHub_Trending/th/three.quarks three.quarks作…

2026/7/6 16:21:55阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →