Shell 文本处理三件套:grep、sed、awk 实战

举报
yd_236639601 发表于 2026/11/14 10:02:44 2026/11/14
【摘要】 在 Linux 服务器上排障、做运维,离不开文本处理:日志、配置文件、命令输出,本质上都是文本。grep、sed、awk 是 Shell 里的“三件套”——grep 负责找,sed 负责改,awk 负责算。本文讲清三者的常用组合,最后用一个 Nginx 访问日志分析的实战把它们串起来。 一、grep:先把想要的行找出来grep 是最常用的过滤工具,核心思路是“先缩小范围,再精细加工”。-n ...

在 Linux 服务器上排障、做运维,离不开文本处理:日志、配置文件、命令输出,本质上都是文本。grep、sed、awk 是 Shell 里的“三件套”——grep 负责找,sed 负责改,awk 负责算。本文讲清三者的常用组合,最后用一个 Nginx 访问日志分析的实战把它们串起来。

一、grep:先把想要的行找出来

grep 是最常用的过滤工具,核心思路是“先缩小范围,再精细加工”。-n 显示行号、-r 递归目录、-i 忽略大小写、-v 反选、-E 启用扩展正则,是日常最常用的五个选项。

grep -rn "error" /var/log/nginx/
grep -ri "timeout" app.log
grep -v "healthcheck" access.log
grep -E '" (4[0-9]{2}|5[0-9]{2}) ' access.log

管道二次过滤比一次写复杂正则更稳:grep "2026-11-14" app.log | grep -v "INFO" | grep "ERROR"。

二、sed:行内替换与删除

sed 是流编辑器,最常用的是替换 s///g 和按行删除,适合批量改配置。s///g 的 g 表示每行内全部替换,不加 g 只替换每行第一个。

sed -i 's/127.0.0.1/0.0.0.0/g' app.conf
sed -i.bak 's/debug=false/debug=true/g' app.conf
sed -i '/^$/d; /^#/d' app.conf
sed -i '10d' data.txt
sed -i '2,5d' data.txt

注意:-i 直接改文件,务必先备份或加 .bak 后缀;分隔符不一定用 /,路径里斜杠多时可换成 #,例如 sed -i 's#/var/log#/data/log#g' app.conf。

三、awk:按列提取与统计

awk 按列处理文本,适合结构化日志和报表统计。默认按空白分隔,-F 指定分隔符,$1 是第一列,$NF 是最后一列;NR 是行号,$0 是整行。

awk '{print $1, $9}' access.log
awk -F: '{print $1, $NF}' /etc/passwd
awk '{count[$9]++} END {for (c in count) print c, count[c]}' access.log
awk '{sum += $10} END {print "总流量:", sum}' access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

四、组合实战:分析 Nginx 访问日志

先用 grep 粗筛出今天的请求,再用 awk 统计 TOP 10 IP 与状态码分布。

grep "14/Nov/2026" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10
grep "14/Nov/2026" /var/log/nginx/access.log | awk '{count[$9]++} END {for (c in count) print c, count[c]}' | sort -rn -k2

思路是固定的:grep 定范围、awk 取列算数、sort + uniq -c 做排名。遇到新日志,先看一行长什么样,数清列号,再套模板。

五、小结

找行用 grep,改文本用 sed,算统计用 awk;实战套路是 grep 定范围 → awk 取列统计 → sort | uniq -c 排名。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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