本手册专为Linux系统管理员和运维工程师设计,涵盖六个最核心的文本处理工具:grep、sed、awk、tail、more和less。这些工具被称为"文本处理六剑客",是日常运维工作中的利器。
一、命令概览
命令 | 主要功能 | 典型应用场景 |
grep | 文本搜索 | 日志过来、配置查找 |
sed | 流编辑器 | 批量替换、文本转换 |
awk | 文本分析处理 | 数据提取、报表生成 |
tail | 查看文件尾部 | 实时日志监控 |
more | 分页查看文件 | 浏览大文件 |
less | 交互式查看大文件(双向导航) | 搜索/行号/跳转/反查 |
二、grep:文本搜索工具
1.作用
基于正则表达式匹配文本行
grep [选项] "模式" [文件...]
2.命令选项
选项 | 描述 | 示例 |
-i | 忽略大小写 | grep -i "error" systemlog.log |
-v | 反向匹配(排除模式) | grep -v "DEBUG" app.log |
-n | 显示行号 | grep -n "warning" system.log |
-c | 统计匹配行数 | grep -c "GET" access.log |
-r | 递归目录搜索 | grep -r "main()" ./src/ |
-E | 是用扩展正则表达式 | grep -E "HTTP/1.[01]\" (4|5)[0-9]{2}" web.log |
-A NUM | 显示匹配行后 NUM 行 | grep -A 2 "crash" error.log |
-B NUM | 显示匹配行前 NUM 行 | grep -B 1 "timeout" debug.log |
-C NUM | 显示匹配行前后各 NUM 行 | grep -C 3 "critical" app.log |
--color=auto | 高亮匹配文本 | grep "fail" report.txt --color=auto |
3.典型示例
# 匹配 IP 地址 -o: 只输出匹配的部分(而不是整行)
#grep -E 等同于 egrep
grep -E -o "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log
# 递归统计代码中函数调用次数
grep -r "parse_data(" ./src | wc -l
# 监控日志实时高亮关键词
tail -f app.log | grep --color=auto -E "ERROR|WARNING"
# 匹配邮箱地址
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}" users.txt
三、sed:流编辑器
1.作用
执行文本替换/删除/插入操作
sed [选项] '指令' [文件...]
2.命令选项
指令 | 描述 | 示例 |
s/old/new/ | 替换第一个匹配 | sed 's/foo/bar/' file.txt |
s/old/new/g | 全局匹配 | sed 's/ foo/bar/g' file.txt |
/pattern/d | 删除匹配行 | sed '/^#/d' config.conf |
/pattern/p | 打印匹配行 | sed -n '/error/p' log.txt |
NUM i\text | 在第 NUM 行前插入文本 | sed '3i\### HEADER ###' report.md |
NUM a\text | 在第 NUM 行后追加文本 | sed '$a\--- END ---' output.txt |
NUM c\text | 替换第 NUM 行 | sed '5c\REPLACED LINE' data.txt |
1,5d | 删除 1-5 行 | sed '10,20d' largefile.log |
3.典型示例
# 批量替换文件内容(备份原文件) -i.bak 备份原文件
sed -i.bak 's/old_domain/new_domain/g' *.conf
# 删除空白行
sed '/^$/d' file.txt
#sed -n: 使用静默模式,不自动打印每一行
#截取指定行日志并输出到46.log文件
sed -n '85700,86000p' systemlog.log > 46.log
#截取指定时间段日志
sed -n '/2024-11-01 14:13 /,/2024-11-01 14:18/p' nohup.out >1101.log
#用于分析特定时间范围内的访问日志,统计并显示这段时间内访问最频繁的10个IP地址
sed -n '/2021-03-23T10:40:00/,/2021-03-23T10:50:10/p' /data/logs/access-2024-07-04.log | awk '{print $1}' | sort | uniq -c | sort -nr -k1 | head -n 10
# awk '{print $1}' 默认以空格分割,输出第一列
# sort 对提取的ip进行排序
# uniq -c 统计每个唯一IP出现的次数
# sort -nr -k1 -n: 按数值排序 -r: 降序排列 -k1: 按第一列(出现次数)排序
# head -n 10 显示访问最频繁的10个IP
#统计一分钟之内调用接口次数
sed -n "/`date -d "1 minute ago" +"%Y-%m-%dT%H:%M:%S"`/,/`date +"%Y-%m-%dT%H:%M:%S"`/p" /data/logs/access-2024-06-07.log |grep '/api/cscpDepts'| awk -F '|' '{ print $5 }' | sort | uniq -c | sort -nr -k1 | head -n 5
四、awk:字段处理器
1.作用
按列处理结构化文本
awk '模式 {动作}' [文件...]
2.命令选项
内置变量 | 描述 | 示例 |
$0 | 整行内容 | awk '{print $0}' file |
$1,$2..$n | 第 n 列 | awk '{print $3,$1}' data |
NR | 当前行号 | awk 'NR>1 {print}' file |
NF | 当前列 | awk '{if(NF>5) print}' log |
FS | 输入字段分隔符(默认空格) | awk -F: '{print $1}' /etc/passwd |
OFS | 输出字段分隔符 | awk -v OFS="\t" '{print $1,$3} |
3.典型示例
# 条件过滤 输出每行第三列值大于100的 第一列和第三列
awk '$3 > 100 {print $1, $3}' sales.txt
# 数值计算
#计算CSV文件中第四列的总和
awk '{sum+=$4} END {print "Total:", sum}' data.csv
# 字符串操作
#只替换每行第2列中首次出现的"old"为"new",gsub会替换所有匹配项
awk '{sub(/old/,"new",$2); print}' items.txt
# 关联数组统计
#统计网站访问者IP频率 遍历数组并打印每个IP及其出现次数
awk '{ip_count[$1]++} END {for(ip in ip_count) print ip, ip_count[$1]}' access.log
五、tail
:文件尾部查看
1.作用
查看文件末尾内容
tail [选项] [文件]
2.命令选项
选项 | 描述 | 示例 |
-n N | 显示最后 N 行(默认 10 行) | tail -n 20 log.txt |
-f | 实时追踪文件更新 | tail -f /var/log/syslog |
-F | 追踪文件(支持重命名/重建) | tail -F rotating.log |
-s N | 设置追踪刷新间隔(秒) | tail -f -s 2 app.log |
-q | 不显示文件名(多文件时) | tail -q file1 file2 |
3.典型示例
# 监控最新日志并高亮错误
tail -f app.log | grep --color=auto -E "ERROR|CRITICAL"
# 查看最近修改的配置文件
tail -n 15 /etc/nginx/nginx.conf
# 多文件追踪(显示文件名)
tail -f service1.log service2.log
六、more
:基础分页查看器
1.作用
分页显示文件(仅向前导航)
more [选项] [文件]
2.选项
快捷键 | 功能 |
空格 | 向下翻一页 |
Enter | 向下翻一行 |
/pattern | 搜索文本 |
:n | 跳转到下一个文件 |
:p | 跳转到上一个文件 |
q | 退出 |
b | 回退一页(部分系统支持) |
局限性:
❌ 不支持向后翻页
❌ 不支持复杂搜索高亮
七、less
:高级分页查看器
1.作用
支持双向导航的分页工具(推荐替代 more)
2.选项
快捷键 | 功能 |
空格 / f | 向前翻一页 |
b | 向后翻一页 |
↑ / ↓ | 逐行滚动 |
/pattern | 向前搜索 |
?pattern | 向后搜索 |
n | 跳至下一个匹配项 |
N | 跳至上一个匹配项 |
g | 跳到文件首行 |
G | 跳到文件末尾 |
:n | 下一个文件(多文件时) |
:p | 上一个文件(多文件时) |
-N | 显示行号(启动选项) |
F | 实时追踪模式(类似 tail -f) |
v | 进入编辑器(vi 模式) |
q | 退出 |
3.典型示例
# 查看文件并显示行号
less -N server.conf
# 打开后直接跳转到匹配行
less +/ERROR app.log
# 查看压缩文件
less access.log.gz # 自动解压显示
# 多文件编辑
less file1.log file2.log