新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux 文本三剑客实操指南:grep / sed / awk

发布时间:2026/10/1 7:57:54来源:尧图网络
Linux 文本三剑客实操指南:grep / sed / awk
一、准备测试数据bashcat /tmp/test.log EOF 2024-01-15 10:23:45 ERROR [user-service] Failed to login: useralice ip192.168.1.10 2024-01-15 10:24:01 INFO [user-service] User login success: userbob ip192.168.1.11 2024-01-15 10:25:12 ERROR [order-service] Payment timeout: order1001 amount99.9 2024-01-15 10:26:33 WARN [order-service] Retry payment: order1001 attempt2 2024-01-15 10:27:45 INFO [order-service] Payment success: order1001 amount99.9 2024-01-15 10:28:10 ERROR [user-service] Failed to login: useralice ip192.168.1.10 2024-01-15 10:29:55 DEBUG [cache-service] Cache hit ratio: 0.85 EOF二、grep —— 查找过滤1. 基础用法bash# 查找 ERROR 行 grep ERROR /tmp/test.log # 忽略大小写 grep -i error /tmp/test.log # 显示行号 grep -n ERROR /tmp/test.log # 反向匹配不包含 grep -v INFO /tmp/test.log # 统计匹配行数 grep -c ERROR /tmp/test.log2. 正则与多条件bash# 扩展正则-E匹配 ERROR 或 WARN grep -E ERROR|WARN /tmp/test.log # 匹配多个关键字与 grep ERROR /tmp/test.log | grep alice # 只输出匹配部分 grep -oE user[a-z] /tmp/test.log # 递归查找目录 grep -rn ERROR /var/log/3. 常用组合bash# 上下文前2行后3行 grep -B2 -A3 Payment timeout /tmp/test.log # 只列出文件名 grep -l ERROR *.log # 静默模式脚本中判断是否存在 if grep -q ERROR /tmp/test.log; then echo 有错误; fi三、sed —— 流编辑器增删改查1. 替换最常用bash# 替换第一个匹配 sed s/ERROR/ERR/ /tmp/test.log # 全局替换 sed s/ERROR/ERR/g /tmp/test.log # 直接修改文件-i sed -i s/ERROR/ERR/g /tmp/test.log sed -i.bak s/ERROR/ERR/g /tmp/test.log # 备份 # 指定行范围替换 sed 1,3s/INFO/INFORMATION/ /tmp/test.log # 只替换匹配行的内容先定位再替换 sed /alice/s/192.168.1.10/10.0.0.1/ /tmp/test.log2. 删除bash# 删除第 3 行 sed 3d /tmp/test.log # 删除 2-4 行 sed 2,4d /tmp/test.log # 删除包含 DEBUG 的行 sed /DEBUG/d /tmp/test.log # 删除空行 sed /^$/d /tmp/test.log # 删除行尾空白 sed s/[[:space:]]*$// /tmp/test.log3. 插入与追加bash# 在第 1 行前插入 sed 1i\ LOG START /tmp/test.log # 在匹配行后追加 sed /ERROR/a\ 需要关注 /tmp/test.log # 替换整行 sed /DEBUG/c\DEBUG 行已被替换 /tmp/test.log4. 打印控制bash# 只打印匹配行-n 抑制默认输出 sed -n /ERROR/p /tmp/test.log # 打印 2-4 行 sed -n 2,4p /tmp/test.log # 打印最后一行 sed -n $p /tmp/test.log5. 提取内容分组bash# 提取 userxxx sed -n s/.*user\([a-z]*\).*/\1/p /tmp/test.log # 提取 IP sed -n s/.*ip\([0-9.]*\).*/\1/p /tmp/test.log四、awk —— 文本分析按列处理1. 基础字段操作bash# 打印第 1、3 列默认空格分隔 awk {print $1, $3} /tmp/test.log # 打印整行 awk {print $0} /tmp/test.log # 指定分隔符-F awk -F {print $1} /tmp/test.log # 打印行号 内容 awk {print NR: $0} /tmp/test.log # 打印最后一列 awk {print $NF} /tmp/test.log2. 条件过滤bash# 打印 ERROR 行 awk /ERROR/ /tmp/test.log # 打印第 3 列是 ERROR 的行 awk $3ERROR /tmp/test.log # 多个条件 awk $3ERROR $4 ~ /user-service/ /tmp/test.log # 数值比较 awk $1 100 data.txt # 取反 awk $3!INFO /tmp/test.log3. 统计计算bash# 统计 ERROR 行数 awk /ERROR/{count} END{print count} /tmp/test.log # 按日志级别统计 awk {level[$3]} END{for (l in level) print l, level[l]} /tmp/test.log # 求和 awk {sum$NF} END{print sum} numbers.txt # 求平均 awk {sum$1; n} END{print sum/n} numbers.txt # 求最大/最小值 awk NR1{max$1} $1max{max$1} END{print max} numbers.txt4. 格式化输出bash# BEGIN/END 块 awk BEGIN{print 结果 } {print $1} END{print 结束 } /tmp/test.log # printf 格式化 awk {printf %-10s %s\n, $3, $1} /tmp/test.log # 指定输出分隔符 awk BEGIN{OFS|} {print $1, $3, $4} /tmp/test.log5. 实用技巧bash# 提取 IP 并统计出现次数 awk {for(i1;iNF;i) if($i ~ /ip/){gsub(ip,,$i); print $i}} /tmp/test.log | sort | uniq -c # 按服务统计 ERROR 数量 awk /ERROR/{gsub(/\[|\]/,,$4); svc[$4]} END{for(s in svc) print s, svc[s]} /tmp/test.log # 打印每行字段数 awk {print NR, NF} /tmp/test.log五、三剑客组合实战场景 1统计 ERROR 日志里各服务的数量并排序bashgrep ERROR /tmp/test.log | awk {print $4} | sed s/\[//;s/\]// | sort | uniq -c | sort -rn场景 2提取支付超时的订单号和金额bashgrep Payment timeout /tmp/test.log | awk {for(i1;iNF;i){if($i~/^order/)o$i; if($i~/^amount/)a$i} print o, a}场景 3把日志格式换成 CSVbashawk {print $1,$2,$3,$4} /tmp/test.log /tmp/test.csv场景 4找出重复登录失败的用户及次数bashgrep Failed to login /tmp/test.log | sed -n s/.*user\([a-z]*\).*/\1/p | sort | uniq -c | sort -rn场景 5删除日志中的敏感 IPbashsed -i -E s/ip[0-9.]/ip***.***.***.***/g /tmp/test.log场景 6按小时统计日志量bashawk {print substr($2,1,2)} /tmp/test.log | sort | uniq -c六、三剑客选型口诀需求推荐找行 / 过滤grep替换 / 删除行 / 插入sed按列处理 / 统计 / 计算awk找行后替换grep sed找行后按列统计grep awk复杂分析awk 单独搞定核心记忆grep 查sed 改行级awk 算列级
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

KNN股市预测源码解析:Python特征工程与回测避坑指南 2026/10/1 22:30:25

KNN股市预测源码解析:Python特征工程与回测避坑指南

简介:这是一份基于KNN算法实现股市预测的Python项目源码包,面向具备一定Python与机器学习基础、希望将分类算法应用于金融时序数据的学习者和开发者。核心思路是通过近邻样本的特征相似度对行情方向进行预估,适合用于课程设计、算法对比实验或…

阅读更多 →
后缀表达式求值:栈原理、中缀转逆波兰表达式完整解析 2026/10/1 22:30:25

后缀表达式求值:栈原理、中缀转逆波兰表达式完整解析

第一次在洛谷刷到P1449 后缀表达式时,我盯着这个名词愣了好一会儿。平时写惯了3*(5-2)7这种中缀式子,突然冒出一个把运算符全丢在后面的3.5.2.-*7.,第一反应是:这玩意儿真的是给人读的吗?不过也正是这道题,…

阅读更多 →
PyTorch实战:MNIST手写数字识别全流程详解与踩坑记录 2026/10/1 22:30:25

PyTorch实战:MNIST手写数字识别全流程详解与踩坑记录

MNIST手写数字识别,是PyTorch学习之路上绕不开的“第一口蛋糕”。甚至可以说,如果你能把MNIST的完整流程跑通,后续的CIFAR、ImageNet项目骨架也就八九不离十了。这篇博文记录我带着“第P1周”计划,用PyTorch从零实现手写数字识别的…

阅读更多 →
抖音福袋自动化:AutoJs移动端UI自动化工程实践 2026/10/1 22:30:25

抖音福袋自动化:AutoJs移动端UI自动化工程实践

1. 项目本质与真实价值定位:这不是“薅羊毛”,而是自动化交互能力的工程实践 “薅羊毛软件-抢福袋源码分享”这个标题,乍看像极了短视频评论区里那些“日入300”的引流话术,但作为在自动化脚本领域摸爬滚打十年、亲手写过上百个真…

阅读更多 →
Linux下Memcached部署与缓存优化:从安装到排查的运维实践 2026/10/1 22:30:25

Linux下Memcached部署与缓存优化:从安装到排查的运维实践

说实话,现在聊缓存,十个人里有九个先想到Redis,memcached这个名字好像已经有点“过气”了。但我这两年做Linux运维和系统调优,反而越来越觉得memcached是个该认真学一学的东西。它不复杂,没有持久化,没有复…

阅读更多 →
Linux mkdir命令详解:从基础创建到权限控制与批量自动化 2026/10/1 22:30:18

Linux mkdir命令详解:从基础创建到权限控制与批量自动化

刚接触 Linux 的人,往往学会的第一条命令就是mkdir。这个命令看起来简单得不能再简单,就是创建目录嘛。但用得多了你会发现,越是基础的工具,越藏着不少讲究。同样是创建目录,你是只需要建一个空文件夹,还是…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉