sed 流编辑器实战:批量改配置与日志清洗的 8 个常用姿势
在 Linux 服务器上做运维,经常要批量改几十台机器的配置文件,或者从日志里抹掉敏感信息。打开编辑器一行行改既慢又容易出错,这时就该让 sed 出场了。
sed 是流编辑器的缩写,按行读取、按规则处理、全程无需交互,非常适合写进脚本批量执行。下面分享 8 个常用姿势。
一、基本语法
通用写法是 sed [选项] '命令' 文件。默认不修改原文件,只打印处理结果;确认无误后再加 -i 原地修改。先看再改,是避免误操作的第一道防线。例如:
sed -n '10,20p' nginx.conf
二、删除行
地址可以是行号、范围或正则:
sed '/^$/d' app.conf
sed '/^#/d' app.conf
sed '5,$d' app.conf
三、替换文本
s 是用得最多的命令,格式为 s/旧内容/新内容/。分隔符不必是斜杠,路径里斜杠多时换成 # 更清爽:
sed 's/80/8080/g' nginx.conf
sed 's#/var/www/html#/data/www#g' nginx.conf
四、原地修改
确认无误后加 -i 改写文件,备份一起写进命令:
sed -i 's/listen 80;/listen 8080;/g' nginx.conf
sed -i.bak 's/debug=false/debug=true/' app.conf
改前自动生成 .bak 备份,改完用 diff 对照确认。
五、插入与追加
a 在行后追加,i 在行前插入,c 整行替换;配合正则地址可以只在匹配行后追加:
sed '3a 新的一行' file.txt
sed '/\[server\]/a # 新增配置段' nginx.conf
六、地址范围
地址支持行号、范围、正则和步长,灵活组合能精准定位:
sed -n '1,10p' access.log
sed -n '/ERROR/,/INFO/p' app.log
sed -n '2~2p' data.txt
七、日志清洗
线上日志常混着手机号、Token,分析前先脱敏:
sed -E 's/1[3-9][0-9]{9}/138****0000/g' access.log
sed -E 's/(token=)[^&]*/\1***/g' access.log
第一条把手机号替换为掩码,第二条用 \1 引用分组 (token=),只替换参数值。
八、命令组合
多个步骤用 -e 串起来一次完成:
sed -e '/^$/d' -e 's/old/new/g' app.conf
注意事项
-i 不可逆,先预览再改,重要文件先备份;正则特殊字符要转义;macOS 的 BSD sed 与 GNU sed 在 -i 用法上有差异;sed 按行处理,跨行文本(如 JSON、XML)应换 jq 或 Python。
总结:查看用 p、删除用 d、替换用 s、改文件加 -i、组合用 -e,批量改配置、清洗日志基本上一条命令就能解决。
- 点赞
- 收藏
- 关注作者
评论(0)