sed凭借流式处理能力实现在线替换:逐行读入、即时处理、输出结果,不启动编辑器、不加载全文到内存;支持基础替换、忽略大小写、变形匹配、范围限定及带备份的原地修改。

不用打开文件,直接在线替换敏感字符串,靠的是 sed 的流式处理能力——它逐行读入、即时处理、输出结果,全程不启动编辑器,也不加载全文到内存。
基础替换:一行命令搞定
最常用的是 s/// 替换命令。比如把日志里所有 password=123456 替成 password=***:
sed 's/password=[^[:space:]]*/password=***/g' access.log- 这里
[^[:space:]]*匹配等号后所有非空白字符,比写死123456更通用 -
g确保一行里多个敏感项都被替换
忽略大小写 + 多种变体匹配
敏感词常有大小写混用或空格干扰,比如 Password、PASSWORD、pass word:
- 用
I标志忽略大小写:sed 's/password=/REDACTED=/Ig' file.txt - 用正则覆盖常见变形:
sed -r 's/[Pp][Aa][Ss][Ss][Ww][Oo][Rr][Dd]\s*=\s*[^\s]*/REDACTED/g' file.txt -
-r启用扩展正则,让写法更简洁清晰
限定范围,避免误伤
只在特定行或上下文里替换,减少副作用:
- 仅处理含
auth的行:sed '/auth/s/password=[^[:space:]]*/password=***/g' file.txt - 跳过注释行(以 # 开头):
sed '/^[[:space:]]*#/!s/password=[^[:space:]]*/password=***/g' file.txt - 替换第10–20行:
sed '10,20s/password=[^[:space:]]*/password=***/g' file.txt
安全落地:原地修改带备份
确认效果无误后,再真正改文件。加 -i 选项,并带上备份后缀:
sed -i.bak 's/api_key=[^[:space:]]*/api_key=HIDDEN/g' config.conf- 执行后生成
config.conf.bak原始副本,新内容写入原文件 - 没加
.bak就是直接覆盖,无备份——生产环境务必带后缀











