Debian 文本处理入门:grep、awk 与 sed

举报
yd_281936295 发表于 2026/11/09 10:51:23 2026/11/09
【摘要】 在 Debian 服务器上排障,十有八九要先跟日志打交道。日志文件动辄几十万行,靠肉眼翻是不现实的,grep、awk、sed 这三个老工具,基本能覆盖日常九成的文本处理需求。一、grep:先把相关的行找出来grep 最常用的姿势就是按关键字过滤,比如在 auth.log 里找失败的登录记录:grep "Failed password" /var/log/auth.log加上 -i 忽略大小写...

在 Debian 服务器上排障,十有八九要先跟日志打交道。日志文件动辄几十万行,靠肉眼翻是不现实的,grep、awk、sed 这三个老工具,基本能覆盖日常九成的文本处理需求。


一、grep:先把相关的行找出来

grep 最常用的姿势就是按关键字过滤,比如在 auth.log 里找失败的登录记录:

grep "Failed password" /var/log/auth.log

加上 -i 忽略大小写,-n 显示行号,-C 3 再带上前后 3 行上下文,定位问题快很多。需要同时满足多个条件时,用 grep "ERROR" app.log | grep "timeout" 这样串联两次过滤,比写复杂正则省事。


二、awk:按列把字段抠出来

日志很多都是按空格或冒号分列的,awk 天生就是干这个的。比如从访问日志里统计每个 IP 出现的次数:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

$1 是第一列,$NF 是最后一列。想只看状态码是 500 的请求,再加个条件:

awk '$9 == 500 {print $1, $7}' /var/log/nginx/access.log


三、sed:做简单的替换

改配置、批量替换文本时 sed 很顺手。比如把配置文件里的旧域名换成新的:

sed -i 's/old.example.com/new.example.com/g' /etc/nginx/conf.d/site.conf

-i 是直接改文件,操作前建议先 cp 备份一份。只想看看替换效果、不落盘,就去掉 -i。


四、三者串联:一个完整的排障例子

假设某个接口偶尔超时,先 grep 捞出超时记录,再 awk 抽出耗时和接口路径,最后 sed 把时间戳里的 T 换成空格方便阅读:

grep "timeout" /var/log/app.log | awk '{print $2, $5, $9}' | sed 's/T/ /' | sort | uniq -c | sort -nr | head -20

这样一轮下来,哪个接口超时最多、集中在什么时段,基本就清楚了。


小结

grep 负责找行,awk 负责取列,sed 负责改写。三个工具单独用都能解决一类问题,管道串起来就是一条完整的日志分析流水线。平时多在测试日志上练几遍,线上排障时手就不会生。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。