为什么说三剑客是效率分水岭?

会用 lscd 只是入门,会用 grep、sed、awk 才算真正掌握了 Linux 命令行的效率。这三者配合使用,可以在几秒钟内完成手工需要几小时的文本处理工作。无论是分析 Nginx 日志、清洗 CSV 数据、批量修改配置文件,三剑客都是不二之选。

grep — 搜索一切

grep 是在文件中搜索匹配文本行,支持正则表达式。

基础用法

grep "关键词" 文件名

日常必会场景

  1. 在日志中找错误grep -i "error" /var/log/syslog
  2. 递归搜索项目代码grep -rn "TODO" ./src/
  3. 排除注释行grep -v "^#" nginx.conf
  4. 看上下文grep -C 3 "ERROR" app.log(显示匹配行前后各3行)
  5. 统计匹配次数grep -c "404" access.log
  6. 匹配整个单词grep -w "error" file.log(不会匹配到 "errorcode")
  7. 使用正则表达式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

日常必会场景

  1. 批量替换sed -i 's/192.168.1.100/10.0.0.50/g' *.conf
  2. 删除空行sed -i '/^$/d' file.txt
  3. 删除注释行sed -i '/^#/d' config.conf
  4. 提取第 5-20 行sed -n '5,20p' file.txt
  5. 在每行前面加内容sed 's/^/# /g' file.txt
  6. 删除行尾空格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 行号。

日常必会场景

  1. 打印第 N 列awk '{print $1}' file.txt
  2. 指定分隔符awk -F':' '{print $1, $3}' /etc/passwd
  3. 条件过滤awk '$3 > 1000' data.txt(第3列大于1000的行)
  4. 求和awk '{sum+=$3} END {print sum}' data.txt
  5. 求平均值awk '{sum+=$3; count++} END {print sum/count}' data.txt
  6. 分组统计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 的日志中找出问题请求,只需要一条命令。