《Linux 文本处理入门:grep、sed、awk 各干什么》

举报
yd_299492234 发表于 2026/11/09 08:35:13 2026/11/09
【摘要】 《Linux 文本处理入门:grep、sed、awk 各干什么》 先说结论在 Linux 上处理文本,三个工具最常用:grep 负责找,sed 负责改,awk 负责算。三者分工不同,记住一句话就够了——找行用 grep,改内容用 sed,按列处理用 awk。新手不用一次全学会,先把每个工具最常用的那一个用法练熟,日常工作基本够用。 一、grep:先把含关键字的行找出来grep 是最常用的文...

《Linux 文本处理入门:grep、sed、awk 各干什么》

先说结论

在 Linux 上处理文本,三个工具最常用:grep 负责找,sed 负责改,awk 负责算。三者分工不同,记住一句话就够了——找行用 grep,改内容用 sed,按列处理用 awk。新手不用一次全学会,先把每个工具最常用的那一个用法练熟,日常工作基本够用。

一、grep:先把含关键字的行找出来

grep 是最常用的文本查找工具,基本用法是 grep 关键字 文件名。比如在日志里找所有报错的行:

grep ERROR app.log

几个日常高频选项值得记住。-n 显示行号,定位问题时很有用;-i 忽略大小写,error 和 ERROR 都能命中;-r 递归查整个目录,适合在项目里找某个配置项出现在哪;-v 反向筛选,排除掉含关键字的行,比如看日志时先去掉无用的调试信息。

一个实用组合是 grep 配管道:先用别的命令产出内容,再用 grep 过滤。例如查看正在运行的进程,只关心含 python 的那几行:

ps aux | grep python

注意这里会多出一行 grep 自身的进程,知道这回事就行,不用深究。

二、sed:不打开文件也能改内容

sed 是流编辑器,最常见的用法是替换文本。基本格式是 sed 's/旧内容/新内容/' 文件名,只替换每行第一次出现的位置;想把一行里所有出现都换掉,在末尾加 g:

sed 's/192.168.1.10/192.168.1.20/g' config.txt

默认情况下 sed 只把结果打印到屏幕,不改原文件。确认替换结果没错后,加上 -i 选项才会真正写回文件。改重要文件之前,先备份一份原文件是个好习惯,改错了还能恢复。

除了替换,sed 还能按行号删行。sed '3d' 文件名 删除第 3 行,sed '1,5d' 文件名 删除第 1 到第 5 行。日常用得最多的还是替换,删行属于顺带记住的用法。

三、awk:按列切分,再做统计

awk 擅长处理按列排列的文本,默认按空格或制表符分列。$1 是第一列,$2 是第二列,$0 是整行。比如从 ps 的输出里只取进程号和命令名:

ps aux | awk '{print $2, $11}'

awk 还能顺手做统计。awk '{sum += $5} END {print sum}' 文件名 可以把第五列全部加起来,算磁盘占用、求访问量都很方便。END 表示所有行处理完之后再执行一次,常用来输出汇总结果。

一个新手容易踩的坑:awk 的列号是从 1 开始数的,$0 才是整行,别把 $1 当成整行用。

四、三个工具怎么配合

实际排查问题时,三个工具经常串起来用。先 grep 把可疑的行筛出来,再用 awk 取出关键的几列,最后用 sed 把格式整理干净。比如从访问日志里统计访问量最多的前十个地址:

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

这条命令里 awk 取第一列,sort 排序,uniq -c 计数去重,再排序取前十。虽然出现了 sort、uniq、head,但思路是一样的:每一步只做一件小事,管道把它们连成一条流水线。

五、新手上路的三条建议

第一,先解决眼前的问题再学新选项,grep、sed、awk 各会三五个用法就能覆盖大部分日常场景。第二,改文件前先备份,sed -i 写回之前先不加 -i 看一遍输出。第三,命令太长就拆开,先看每一步的中间结果对不对,再拼成完整管道。

文本处理是 Linux 的基本功,不求一次记住所有参数,知道“找行、改内容、按列算”分别找谁,就已经入门了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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