一、为什么要学“三剑客”?
在 Linux 运维中,文本处理是最常见的需求:
从日志中筛选关键错误 批量批改配置文件 提取监控数据生成报表
- grep
负责查找 - sed
负责替换与批量编辑 - awk
负责格式化与统计
掌握它们,你的运维效率会提升 N 倍!
二、准备工作:目录、文件、命令检查
在开始之前,请先在主服务器上创建一个示例目录,并准备一份测试文本:
# 登录到 masterssh [email protected]# 创建工作目录mkdir-p ~/dba-scripts/three-musketeerscd ~/dba-scripts/three-musketeers# 创建示例日志文件cat> sample.log <<'EOF'2025-05-24 10:00:01 INFO Starting MySQL master2025-05-24 10:05:12 WARN Connection slow from 192.168.1.102025-05-24 10:10:45 ERROR Failed to replicate to slave12025-05-24 10:15:33 INFO Cleaning up old backupsEOF
然后,务必检查三剑客命令是否可用:
forcmdingrepsedawk;docommand-v$cmd>/dev/null 2>&1if[$?-ne0];thenecho"错误:未检测到命令 $cmd,安装请执行 -> sudo dnf install -y $cmd"exit1fidoneecho"✅ grep、sed、awk 均已安装,可开始学习!"
三、grep:精确查找,你要的都在这里
3.1 基本用法
grep"ERROR" sample.log
解释
默认区分大小写 输出所有包含 “ERROR” 的行
3.2 常用选项
-i | |
-n | |
-v | |
-r -R | |
-E |
# 查找所有含 error(不区分大小写),并显示行号grep-in"error" sample.log
3.3 实战:找出最近一小时内的错误
假设日志按时间顺序记录,想要筛出最近一小时(60 分钟)内的 ERROR:
# 计算 60 分钟前的时间戳START_TIME=$(date-d'1 hour ago' +"%Y-%m-%d %H:%M")grep"${START_TIME:0:13}" sample.log |grep"ERROR"
四、sed:批量替换与编辑,就用这一把
4.1 基本替换
# 将所有 WARN 替换为 WARNING,直接在终端输出sed's/WARN/WARNING/g' sample.log
s/old/new/g
:替换所有匹配
4.2 直接修改文件
# 先备份,再批量替换cp sample.log sample.log.baksed-i's/WARN/WARNING/g' sample.log
-i
:原地编辑 - 注意
:部分系统需要 -i ''
或-i.bak
4.3 实战:批量添加日期前缀
将每行前面加上当前日期时间戳:
sed-i"s|^|$(date +"[%F %T] ")|" sample.log
^
表示行首 "$(date ...)"
嵌入 Shell 命令
五、awk:复杂统计与格式化,一条命令搞定
5.1 基本字段提取
# 打印第 2 列(日志级别)和第 3 列(消息)awk'{print $2, $3}' sample.log
默认以空格或制表符分割字段
5.2 条件筛选
# 只显示 ERROR 级别的行,并打印行号与消息awk'$2=="ERROR" {print NR, $0}' sample.log
$2=="ERROR"
:第二列等于 ERROR NR
:当前行号 $0
:整行内容
5.3 实战:统计日志级别出现次数
forcmdingrepsedawk;docommand-v$cmd>/dev/null 2>&1if[$?-ne0];thenecho"错误:未检测到命令 $cmd,安装请执行 -> sudo dnf install -y $cmd"exit1fidoneecho"✅ grep、sed、awk 均已安装,可开始学习!"
0
使用数组 count
统计在 END
块中输出结果
输出示例:
forcmdingrepsedawk;docommand-v$cmd>/dev/null 2>&1if[$?-ne0];thenecho"错误:未检测到命令 $cmd,安装请执行 -> sudo dnf install -y $cmd"exit1fidoneecho"✅ grep、sed、awk 均已安装,可开始学习!"
1
六、联合三剑客:组合才能更强大
举例:先找出 ERROR 行,再替换关键字,最后统计出现次数:
forcmdingrepsedawk;docommand-v$cmd>/dev/null 2>&1if[$?-ne0];thenecho"错误:未检测到命令 $cmd,安装请执行 -> sudo dnf install -y $cmd"exit1fidoneecho"✅ grep、sed、awk 均已安装,可开始学习!"
2
这样,你一次流水线操作就完成了复杂任务。
七、常见“命令未找到”排查
bash: grep: 未找到命令 | sudo dnf install -y grep - PATH 环境缺少 /usr/bin |
bash: sed: 未找到命令 | sudo dnf install -y sed - 检查别名或脚本名冲突 |
bash: awk: 未找到命令 | sudo dnf install -y gawk - 部分系统需安装 mawk 或 nawk |
sed: -e expression #1, char 1... | |
awk: syntax error | awk --version 查看,必要时安装 gawk |
下篇我们将带你深入了解 Linux 系统监控工具(top、htop、iotop、netstat)——让你的运维更上一层楼!
有问题就在后台留言,我会一一解答。(脚本为服务器复制可能有空格问题)
forcmdingrepsedawk;docommand-v$cmd>/dev/null 2>&1if[$?-ne0];thenecho"错误:未检测到命令 $cmd,安装请执行 -> sudo dnf install -y $cmd"exit1fidoneecho"✅ grep、sed、awk 均已安装,可开始学习!"
3
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...