为什么说三剑客是效率分水岭?
会用 ls、cd 只是入门,会用 grep、sed、awk 才算真正掌握了 Linux 命令行的效率。这三者配合使用,可以在几秒钟内完成手工需要几小时的文本处理工作。无论是分析 Nginx 日志、清洗 CSV 数据、批量修改配置文件,三剑客都是不二之选。
grep — 搜索一切
grep 是在文件中搜索匹配文本行,支持正则表达式。
基础用法
grep "关键词" 文件名
日常必会场景
- 在日志中找错误:
grep -i "error" /var/log/syslog - 递归搜索项目代码:
grep -rn "TODO" ./src/ - 排除注释行:
grep -v "^#" nginx.conf - 看上下文:
grep -C 3 "ERROR" app.log(显示匹配行前后各3行) - 统计匹配次数:
grep -c "404" access.log - 匹配整个单词:
grep -w "error" file.log(不会匹配到 "errorcode") - 使用正则表达式:
grep -E "error|warning|fatal" app.log
实战:快速分析 Nginx 访问日志
grep "2026-06-04" /var/log/nginx/access.log | grep " 404 "
一秒找出今天所有返回 404 的请求。
sed — 替换和编辑
sed 是流编辑器,在不需要打开文件的情况下进行文本替换、删除、插入操作。特别适合批量修改配置文件和在脚本中使用。
最核心用法:替换
sed 's/旧的/新的/g' 文件名
加上 -i 参数会直接修改文件:sed -i 's/旧/新/g' file.txt
日常必会场景
- 批量替换:
sed -i 's/192.168.1.100/10.0.0.50/g' *.conf - 删除空行:
sed -i '/^$/d' file.txt - 删除注释行:
sed -i '/^#/d' config.conf - 提取第 5-20 行:
sed -n '5,20p' file.txt - 在每行前面加内容:
sed 's/^/# /g' file.txt - 删除行尾空格:
sed -i 's/[[:space:]]*$//' file.txt
实战:批量修改 Nginx 虚拟主机配置
假设你有 20 个站点配置,要把旧的域名换成新的:
sed -i 's/old-domain.com/new-domain.com/g' /etc/nginx/sites-enabled/*.conf
一秒搞定,比手动逐文件改快了 100 倍。
awk — 数据提取和计算
awk 本质是一个完整的文本处理编程语言。虽然学起来比 grep/sed 陡峭,但掌握基本用法后,你的数据处理能力会上一个大台阶。
核心概念
awk 按行读取文本,每行按分隔符切分为字段:$1 第1列、$2 第2列、$0 整行、NF 字段数、NR 行号。
日常必会场景
- 打印第 N 列:
awk '{print $1}' file.txt - 指定分隔符:
awk -F':' '{print $1, $3}' /etc/passwd - 条件过滤:
awk '$3 > 1000' data.txt(第3列大于1000的行) - 求和:
awk '{sum+=$3} END {print sum}' data.txt - 求平均值:
awk '{sum+=$3; count++} END {print sum/count}' data.txt - 分组统计:
awk '{count[$1]++} END {for(k in count) print k, count[k]}' log.txt
实战:分析 Nginx 日志 — 统计访问量 Top 10 的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
这条管道命令组合了三剑客的精华:awk 提取 IP 列 → sort 排序 → uniq 统计 → 按次数逆序 → 取前10。同样可以分析 API 接口调用次数、文件下载排行等。
三剑客联合作战
真正的威力在于管道组合。一个经典案例——分析 500 错误的请求来源:
grep " 500 " access.log | awk '{print $1, $7}' | sort | uniq -c | sort -rn | head -20
这条命令链:grep 筛选 500 错误 → awk 提取 IP 和请求路径 → sort + uniq 统计 → 按频次排序 → 取 Top 20。从几 GB 的日志中找出问题请求,只需要一条命令。