sed命令的核心使用场景已经介绍过了,本篇我搜集了sed的6大高频使用场景及一些需要注意的事项。本次命令有点复杂,大家用到的时候可以查询下,没有必要死记硬背,部分命令由于我虚拟机上没有环境,没有演示。
一、实战案例
案例 1:日志清洗与提取
#提取Nginx日志中的IP地址,ip地址在行首 sed -n 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p' access.log
#过滤403错误日志并保存sed -n '/ 403 /p' access.log > 403.log
#去除日志中超过1000字符的异常行sed '/^.\{1000,\}/d' /var/log/securesed -E '/^.{1000,}/d' /var/log/secure #正则也可以
上面的处理仅是终端显示结果,不会修改源文件,如果需要保存修改,需要加-i参数。
案例 2:配置文件批量更新
批量将所有配置文件的http改为https(含子目录)sed -i 's|http://|https://|g' /etc/nginx/conf.d/*.conf
备注:修改前请备份好配置文件
#修改SSH端口(从22改为2222)sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
案例3:代码批量修改#注释所有Python打印语句sed '/print/s/^/#/' a.py
#批量替换变量名(var_old→var_new)sed -i 's/var_old/var_new/g' *.py
#去除行尾空格(代码格式化)sed -i 's/[ \t]*$//' *.txt #实际工作中一般后缀是java
案例 4:日志分析进阶
📌 场景背景:Nginx 日志中提取近 1 小时访问量 TOP10 的 IP,定位恶意请求源
#步骤1:过滤近1小时日志(假设时间格式[2026-02-23 14:xx:xx])sed -nE '/2026-02-23 1[4-5]:[0-5][0-9]:[0-5][0-9]/p' access.log > recent.log#步骤2:提取IP并统计TOP10sed -nE 's/.*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - - .*/\1/p' recent.log | sort | uniq -c | sort -nr | head -10#步骤3:分析异常IP的访问路径(替换为实际IP)sed -n '/192.168.1.100/p' access.log | sed -E 's/.*"GET (.*) HTTP\/1.1".*/\1/' | sort | uniq
✅ 效果:快速锁定高频访问 IP 和异常路径。
案例 5:应急故障排查(线上救命)
场景背景:应用报错 “数据库连接超时”,需快速注释所有非核心数据库配置
# 1.注释所有db.slave配置行sed -i '/db.slave/s/^/#/' datasource.yml# 2.修改超时时间(3秒→30秒)sed -i 's/db.timeout=3000/db.timeout=30000/' datasource.yml# 3.恢复配置(故障解决后)sed -i '/db.slave/s/^#//' datasource.ymlsed -i 's/db.timeout=30000/db.timeout=3000/' datasource.yml
案例 6:文本格式标准化
场景背景:Excel 导出的 TXT 文件格式混乱,需统一整理为 CSV
# 1.多个空格合并为一个逗号sed -E 's/ +/,/g' messy.txt > step1.csv# 2.删除首尾逗号sed -i -E 's/^,//;s/,$//' step1.csv# 3.中文逗号转英文sed -i 's/,/,/g' step1.csv
二、核心注意事项
- 特殊字符转义处理/、.、*等字符时,用\转义或换分隔符(如s|/usr/local|/opt|g)
- 原地编辑备份永远先用无-i的命令测试输出,确认无误再用-i.bak备份修改
- Windows 文件处理Windows 文件换行符为\r\n,需先执行sed -i 's/\r$//' file.txt转换
- 正则模式选择
- 递归处理注意用find配合sed时,避免误改系统文件(建议先find查看文件列表)
- 大文件处理处理 GB 级日志时,避免用-i原地修改(先分块处理split,再合并cat)
#打印匹配行sed -n '/模式/p' file
#原地修改并备份sed -i.bak '命令' file
#多行命令执行sed -e '命令1' -e '命令2' file
#提取IP地址,ip地址在行首sed -n 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p' file
#递归替换(结合find)find 目录 -name "文件通配符" -exec sed -i '命令' {} \;
四、总结
1.sed 核心场景:日志处理、配置批量修改、文本格式化,搭配-E(简化正则)、-i(原地修改)、-n(精准打印)使用;
2. 常用避坑:先预览(无-i)、必备份(-i.bak)、特殊字符换分隔符;
3. 高阶技巧:组合 sed+find/xargs 实现递归处理,搭配 sort/uniq 完成日志统计。
#运维#linux运维#linux三剑客#sed实战