sed替换需掌握-i(就地修改)、s(替换命令)、g(全局)三要素;支持预览、备份、特殊字符转义、行号/锚点精准控制及通配符批量处理。

直接用 sed -i 's/旧字符串/新字符串/g' 文件名 就能完成替换。关键在 -i(就地修改)、s(替换命令)、g(全局)三个要素,缺一不可。
基础替换:单文件、全匹配
默认情况下,sed 不改原文件,只输出结果到屏幕。确认无误后再加 -i 真实写入:
- 先预览效果:
sed 's/abc/xyz/g' file.txt - 确认后执行替换:
sed -i 's/abc/xyz/g' file.txt - 想保留原始文件?加备份后缀:
sed -i.bak 's/abc/xyz/g' file.txt(生成file.txt.bak)
处理特殊字符:换分隔符避坑
如果要替换的内容含斜杠(如路径、URL),用 / 作分隔符会报错。换成 |、# 或 _ 更安全:
- 替换路径:
sed -i 's|/var/www/html|/opt/app/public|g' nginx.conf - 替换 URL:
sed -i 's#http://old.site#https://new.site#g' config.json - 含变量时注意引号:
new_host="prod.example.com"; sed -i "s#dev.example.com#$new_host#g" app.env(必须用双引号才能展开变量)
精准控制:行号、行首、单词边界
避免误替换——比如把 cat 替成 dog,结果 category 也变了。用锚点和边界限定范围:
- 仅替换第 3 行:
sed -i '3s/foo/bar/' script.sh - 仅替换行首的
#注释:sed -i 's/^#.*//g' settings.ini - 只换完整单词(前后非字母数字):
sed -i 's/\berror\b/failure/g' log.txt
批量操作:多文件统一处理
不用一个个敲,用通配符或 find 一次搞定:
- 当前目录所有
.conf文件:sed -i 's/localhost/127.0.0.1/g' *.conf - 递归处理子目录下的
.py文件:find . -name "*.py" -exec sed -i 's/print(/logging.info(/g' {} \; - 限制类型+排除某些路径:
find ./src -type f -name "*.js" ! -path "./src/node_modules/*" -exec sed -i 's/console\.log/console.warn/g' {} \;











