Linux 文本处理三剑客 grep/sed/awk 入门实战:从日志分析到批量替换

很多刚接触 Linux 的人,卡住的不是装系统,而是面对一堆文本文件不知道怎么快速提取想要的信息。其实只要把 grep、sed、awk 这『文本处理三剑客』用熟,日志分析、配置批量修改、数据清洗都能在终端里几秒钟搞定,完全不用打开编辑器一行行找。

一、为什么是这三件

grep 负责『按内容找行』,sed 负责『流式改文本』,awk 负责『按列提字段』。它们都走标准输入、出标准输出,天然能管道串起来。配合之前在 Linux 命令行效率翻倍:10 个被低估却每天用得上的实用命令与技巧里提到的管道思维,三剑客就是效率工具箱的发动机。它们处理的是纯文本,不挑文件大小,上 G 的日志也能流式扫。

二、grep:先学会把行找出来

最基本的用法:grep 'error' app.log 把含 error 的行全打印出来。加 -n 显示行号,加 -i 忽略大小写,-v 反向(不含某词),-r 递归目录。几个高频组合:

  • grep -rn 'TODO' src/:在源码里找所有待办标记。
  • grep -c '404' access.log:统计 404 出现次数。
  • grep -E 'warn|error' app.log:同时匹配多个关键词(扩展正则)。

排查网络类问题时,grep 也常和 Linux 网络故障排查实战:从 ping 到 traceroute 一步步定位『连不上』里提到的那些命令配合,把命令输出里关键的一行捞出来单独看。

三、sed:批量改文本不进编辑器

sed 最常被用的是替换:sed 's/旧/新/' file 默认只改第一行匹配,加 g 全局替换。例如把配置里的 8080 全改成 9090:sed -i 's/8080/9090/g' config.conf,其中 -i 表示直接写回文件(改之前建议先备份)。删除含某词的行:sed '/debug/d' file。sed 还支持行号范围,sed '10,20d' 删 10 到 20 行。批量重命名类需求,sed 配合循环比手写快得多。

四、awk:按列拆开再统计

awk 默认按空白分列,$1 是第一列、$NF 是最后一列。统计访问最多的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head。还能写条件:awk '$9==404 {print $7}' access.log 打印所有 404 请求的地址列。复杂一点的求和、分组统计,awk 用 BEGIN/END 块就能当小型报表工具。

五、三者组合:一个日志分析实战

假设要找出今天报错最多的接口:先 grep 'ERROR' app.log 捞出错误行,再用 awk 取出接口字段,sort/uniq 计数排序。要看某个服务相关的日志,结合 用 systemd 管理开机启动服务:从 enable 到 journalctl 排错全流程里讲的 journalctl -u 服务名 把服务日志喂给 grep,比直接翻文件更准。这三步串成管道,就是运维日常最常用的『捞问题』动作。

六、几个容易踩的坑

  • sed -i 没备份:改前先 cp config.conf config.conf.bak,尤其线上文件。
  • 正则里的特殊字符:点号、斜杠要转义,sed 替换斜杠时可用别的分隔符如 sed 's#/old/#/new/#g'
  • awk 字段分隔不对:用 -F',' 指定逗号分隔,处理 CSV 时才不会错位。

七、小结

grep 找、sed 改、awk 拆,三个命令单独都不难,难的是养成『能用一行管道解决就不开编辑器』的习惯。把本文和前面的命令行效率、网络排查文章连起来练,Linux 日常运维的不少重复劳动都能交给终端。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容