Shell 文本处理命令速查
更新时间:2026-08-25。本文覆盖 Shell 编程主题的第③族:文本处理命令,约 22 个,是日志分析、数据清洗、配置处理的绝对主力。
一、搜索与查看
1.1 grep — 文本搜索
bash
grep "error" app.log # 搜索包含 error 的行
grep -i "error" app.log # 忽略大小写
grep -n "error" app.log # 显示行号
grep -v "debug" app.log # 排除(取反)
grep -r "func(" ./src/ # 递归搜索目录
grep -c "error" app.log # 计数
grep -l "error" *.log # 只列文件名
grep -A2 -B2 "error" app.log # 上下文 2 行
grep -E "err|warn" app.log # 扩展正则(等价 egrep)
grep -P "\d{3}-\d{4}" file # Perl 正则
grep -w "word" file # 整词匹配正则要点:. 任意字符、* 前项重复、^ 行首、$ 行尾、[abc] 字符类、\+ \{n\}(BRE)或 + {n}(ERE -E)。
1.2 head / tail — 头尾
bash
head -5 file.txt # 前 5 行
tail -5 file.txt # 后 5 行
tail -f app.log # 实时跟踪(神器)
tail -n 20 -f app.log # 后 20 行并跟踪1.3 less / cat
bash
less app.log # 分页查看(/搜索,q 退出)
cat file.txt # 拼接输出
cat a b > c # 拼接文件二、流编辑
2.1 sed — 流编辑器
bash
sed -n '5p' file.txt # 打印第 5 行
sed 's/old/new/' file # 替换每行第一个
sed 's/old/new/g' file # 替换全部
sed '/pattern/d' file # 删除匹配行
sed 's/^/## /' file # 行首加前缀
sed '1i\HEADER' file # 首行前插入
sed -i 's/a/b/g' file # 原地修改(-i 直接改文件)2.2 awk — 按列/字段处理(最强)
bash
awk '{print $1}' file # 打印第 1 列
awk '{print $1, $3}' file # 多列
awk -F: '{print $1}' /etc/passwd # 用 : 分隔
awk '$3 > 100 {print $1}' file # 条件过滤
awk '{sum += $1} END {print sum}' file # 求和
awk 'NR==1{print "表头:", $0}' file # NR 行号
awk '{print NR, $0}' file # 带行号
awk 'BEGIN{OFS=","} {print $1,$2}' file # 输出分隔符awk 是"文本 Excel":$0 整行、$1 第 1 列、NF 列数、NR 行号、-F 指定分隔符、BEGIN/END 初始化与收尾块。
三、排序与去重
3.1 sort
bash
sort file.txt # 字典序
sort -n file.txt # 数值排序
sort -r file.txt # 倒序
sort -u file.txt # 排序并去重
sort -t: -k3 -n /etc/passwd # 用 : 分隔按第 3 列数值排序3.2 uniq
bash
uniq file.txt # 去重(必须先 sort,只去相邻重复)
uniq -c file.txt # 计数
uniq -d file.txt # 只显示重复行
sort file.txt | uniq -c # 配合 sort 统计出现次数日志统计经典组合:sort log | uniq -c | sort -rn | head——统计出现最多的条目。
3.3 wc
bash
wc -l file.txt # 行数
wc -w file.txt # 词数
wc -c file.txt # 字节数
wc -l *.log # 多文件四、列裁剪与拼接
| 命令 | 作用 | 示例 |
|---|---|---|
cut | 按列/字符裁剪 | cut -d: -f1 file、cut -c1-5 file |
paste | 按列拼接多文件 | paste a.txt b.txt |
join | 按共同字段连接 | join -t: a b |
tr | 字符翻译/删除 | tr 'a-z' 'A-Z'、tr -d '\r'、tr -s ' ' |
tee | 输出到文件并回显 | `cmd |
diff | 文件差异 | diff a b、diff -u a b |
comm | 两文件比较 | comm a b |
bash
cut -d, -f1,3 data.csv # 取 CSV 第 1、3 列
tr '[:upper:]' '[:lower:]' < file # 转小写
command 2>&1 | tee run.log # 保存日志同时看输出五、管道组合实战
5.1 统计日志中错误类型 TOP 5
bash
grep -E "ERROR|FATAL" app.log \
| awk '{print $NF}' \
| sort \
| uniq -c \
| sort -rn \
| head -55.2 提取 URL 中的域名
bash
grep -oP 'https?://\K[^/]+' access.log | sort | uniq -c | sort -rn5.3 计算数值列求和 / 平均值
bash
awk '{sum+=$3; n++} END {print "sum=",sum, "avg=",sum/n}' data.txt5.4 找最大文件(衔接文件命令)
bash
ls -l | awk '{print $5, $9}' | sort -rn | head -10六、与主线衔接
- 这些命令正是本站 日志分析 与各类观测输出(
top、sar、vmstat文本结果)的加工利器——观测工具出原始数据,Shell 文本处理出结论。 grep -oP提取、awk聚合、sort|uniq -c统计,是性能报告生成脚本的标准组合。- 更多命令见 文件与目录命令、进程与系统命令。
一句话总结
文本处理四板斧:grep 搜、sed 改、awk 列、sort|uniq|wc 统计;配合管道 | 与重定向,把日志和数据变成一行脚本就能出结果。