当前位置:首页>Linux>linux三剑客之sed(下):Linux sed 实战进阶:6大高频场景 + 避坑指南

linux三剑客之sed(下):Linux sed 实战进阶:6大高频场景 + 避坑指南

  • 2026-09-08 17:14:04
linux三剑客之sed(下):Linux sed 实战进阶:6大高频场景 + 避坑指南

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

二、核心注意事项

  1. 特殊字符转义
    处理/、.、*等字符时,用\转义或换分隔符(如s|/usr/local|/opt|g)
  1. 原地编辑备份
    永远先用无-i的命令测试输出,确认无误再用-i.bak备份修改
  1. Windows 文件处理
    Windows 文件换行符为\r\n,需先执行sed -i 's/\r$//' file.txt转换
  1. 正则模式选择
    复杂正则用-E选项,减少()等符号的转义
  1. 递归处理注意
    用find配合sed时,避免误改系统文件(建议先find查看文件列表)
  1. 大文件处理
    处理 GB 级日志时,避免用-i原地修改(先分块处理split,再合并cat)
三、命令速查
#全局替换sed 's/旧/新/g' file
#删除空行sed '/^$/d' file
#打印匹配行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实战

最新文章

随机文章