Linux 文本处理入门:grep、sed 与 awk 三件套

举报
vanseny 发表于 2026/11/07 06:09:30 2026/11/07
【摘要】 刚接触 Linux 的新手,迟早会遇到这样的场景:日志文件几万行,只想找报错的那几行;配置文件几十处,要把旧域名批量换成新的;一列数字,要快速算出总和。打开编辑器一行行翻,既慢又容易漏。其实这三件事各有一件专属工具:grep 负责找,sed 负责改,awk 负责算。学会它们,日常文本处理基本不用再手动翻文件。 小节一、grep:先把要找的行筛出来grep 是三件套里最常用的,基本用法就是:g...

刚接触 Linux 的新手,迟早会遇到这样的场景:日志文件几万行,只想找报错的那几行;配置文件几十处,要把旧域名批量换成新的;一列数字,要快速算出总和。打开编辑器一行行翻,既慢又容易漏。

其实这三件事各有一件专属工具:grep 负责找,sed 负责改,awk 负责算。学会它们,日常文本处理基本不用再手动翻文件。

小节一、grep:先把要找的行筛出来

grep 是三件套里最常用的,基本用法就是:

grep 关键词 文件名

比如在 Nginx 访问日志里找所有 404:

grep 404 access.log

想忽略大小写,加 -i;想看关键词在第几行,加 -n;只想数有多少行命中,加 -c。组合起来:

grep -in error app.log

意思是忽略大小写、显示行号,找出 app.log 里所有含 error 的行。记住一个习惯:先用 grep 把范围缩小,再对结果做下一步处理,不要一上来就对整个大文件动手。

小节二、sed:批量改,不用逐行编辑

sed 最常见的用法是替换,格式是:

sed s/旧内容/新内容/g 文件名

比如把配置文件里的旧域名换掉:

sed s/old.example.com/new.example.com/g config.txt

注意:这样只会把结果打印到屏幕,原文件并不会被改动,先看一眼结果对不对,确认无误再加 -i 真正写入文件:

sed -i s/old.example.com/new.example.com/g config.txt

-i 是直接改文件的意思,改之前最好先备份一份原文件,替换写错了还能恢复。sed 还能按行删内容,比如删掉所有空行:

sed /^$/d notes.txt

小节三、awk:按列算,按条件取

awk 把每一行按空格或指定分隔符切成列,第 1 列叫 $1,第 2 列叫 $2,以此类推。想取访问日志里的 IP 和状态码:

awk '{print $1, $9}' access.log

想统计某个接口被访问了多少次,先取列、再排序计数:

awk '{print $7}' access.log | sort | uniq -c | sort -nr

这行命令的意思是:取出第 7 列(请求路径),排序后去重计数,再按次数从多到少排。awk 还能直接算数,比如把一列数字求和:

awk '{sum += $2} END {print sum}' numbers.txt

小节四、三件套怎么配合

三件套真正的威力在组合。典型流程是:grep 先筛出关心的行,sed 或 awk 再对筛出来的结果加工。比如先找出所有报错行,再只看其中的时间列:

grep ERROR app.log | awk '{print $1, $2}'

再比如先批量替换,再验证替换结果:

sed -i s/old/new/g config.txt
grep new config.txt

管道符 | 把上一个命令的输出交给下一个命令,这就是 Linux 文本处理的标准姿势:每件工具只做一件事,组合起来解决完整问题。

小节五、三个新手常踩的坑

第一,grep 找不到内容,先检查关键词大小写和文件路径,多数时候不是工具坏了,是拼写或路径错了。

第二,sed 加 -i 之前没备份,替换规则写错后原文件直接被改坏,养成先不加 -i 预览、确认后再写入的习惯。

第三,awk 的列号从 $1 开始,$0 代表整行;列数不对时,先用 head 取一行出来数一数分隔符,别凭感觉猜。

grep 找、sed 改、awk 算,这三件套覆盖了日常文本处理的九成场景。下次再遇到几万行的日志,先别急着打开编辑器翻——一行 grep 缩小范围,再接 sed 或 awk 加工,往往几秒就出结果。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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