Linux 常用文本处理三剑客 grep / sed / awk 入门

举报
yd_223549756 发表于 2026/11/11 15:17:18 2026/11/11
【摘要】 简要介绍 Linux 文本处理三剑客 grep、sed、awk 的基本用法与常用选项,附可直接运行的命令示例和组合使用场景。

在 Linux 日常运维和脚本编写中,有三个命令行工具出场率极高:grep、sed 和 awk。它们各有分工,又经常组合使用,被老手戏称为"文本处理三剑客"。本文简要介绍它们的基本用法和典型场景,并给出可直接复制运行的命令示例。

1. grep —— 在文本中搜索匹配的行

grep 用于从文件或标准输入中找出符合正则表达式的行。最常用的是管道配合其他命令使用。

常用选项:

  • -i:忽略大小写
  • -v:取反,输出不匹配的行
  • -n:显示行号
  • -r:递归搜索目录下所有文件
  • -c:只统计匹配行数
  • -E:使用扩展正则表达式(等价于 egrep)

示例:

# 在日志中搜索 ERROR 并显示行号
grep -n "ERROR" /var/log/syslog

# 列出当前目录下递归包含 "TODO" 的文件
grep -rl "TODO" ./src

# 配合管道,从进程列表中过滤 nginx
ps aux | grep -v grep | grep nginx

2. sed —— 流式文本编辑

sed(stream editor)按行读取、根据规则修改、再输出,适合原地替换、插入、删除。

常用语法:

  • s/旧/新/flags:替换
  • a\文本 / i\文本:在行后/行前追加
  • d:删除匹配行
  • -i:就地修改文件(建议先用备份后缀如 -i.bak)

示例:

# 将文件中所有 http:// 替换为 https:// 并直接改原文件(先备份)
sed -i.bak 's|http://|https://|g' config.yml

# 删除空行
sed '/^$/d' notes.txt

# 在第 3 行后面插入一行注释
sed -i '3a\# 这是第3行后的注释' config.yml

在华为云 ECS 上批量修改 Nginx 配置时,sed 的 s 替换配合 -i.bak 是最稳妥的"改错可回退"做法。

3. awk —— 面向列的文本处理

awk 把每一行按分隔符切成字段($1、$2 … $NF),非常适合表格类数据的提取和计算。内置变量:

  • NF:字段数,$NF 是最后一个字段
  • NR:当前行号
  • FS / -F:字段分隔符
  • BEGIN / END:处理首尾逻辑

示例:

# 查看磁盘使用,只打印挂载点和可用百分比
df -h | awk '{print $6, $5}'

# 统计 /etc/passwd 中用了哪种 shell(最后一段)
awk -F: '{print $NF}' /etc/passwd | sort | uniq -c | sort -rn

# 求第三列总和
awk '{sum += $3} END {print "total:", sum}' data.csv

4. 组合使用:三剑客一起上

把它们串在管道里可以完成更复杂的工作流。

示例 1:找日志里状态码 5xx 的请求,只保留 IP 和路径

grep " 5[0-9][0-9] " access.log | awk '{print $1, $7}'

示例 2:把配置文件里某段的 port 号全部 +10

sed -n '/server/,/}/p' nginx.conf | awk '/port/{gsub(/:/, ""); printf "%s:%d\n", substr($0,1,index($0," ")-1), $NF+10}'

示例 3:快速统计某个服务占用最多的 5 个进程 PID

ps aux | grep java | grep -v grep | awk '{print $2}' | head -5

小结

  • grep 负责"找行",sed 负责"改行",awk 负责"拆列计算"。
  • 先用 grep 缩小范围,再用 awk 提取所需字段,最后用 sed 做格式微调,是一套常见的组合拳。
  • 在华为云 ECS 上做日志排查、配置批量替换、资源统计时,优先用这三个工具往往比打开编辑器更快。

提示:sed 和 awk 的行为在不同发行版(GNU vs BSD/macOS)可能略有差异。在 macOS 上建议安装 GNU 版本:brew install gnu-sed gawk,或使用兼容写法。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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