最常用方法是用sed命令进行流式文本处理:支持单文件或批量替换,可精准控制范围;-i就地修改,g实现全局替换,可用其他分隔符避免路径冲突,加.bak自动备份,结合find可递归处理多文件。

最常用、最直接的方法是用 sed 命令,它专为流式文本处理设计,支持单文件或批量替换,且能精准控制范围和行为。
替换单个文件中的字符串
基础命令格式:
sed -i 's/旧字符串/新字符串/g' 文件名
说明:
- -i 表示就地修改(直接改原文件),不加它只会把结果输出到屏幕,不保存;
- s/.../.../g 中的 g 是关键,代表“全局”,即替换每行所有匹配项;没 g 就只换每行第一个;
- 如果字符串里含斜杠(比如路径
/usr/bin),可换分隔符,例如:sed -i 's#/usr/bin#/opt/bin#g' config.sh; - 想先预览效果再动手?去掉
-i运行一次:sed 's/foo/bar/g' file.txt,确认无误再加-i执行。
安全替换:自动备份原文件
加个后缀就能保留原始文件,避免误操作丢数据:
sed -i.bak 's/DEBUG = True/DEBUG = False/g' settings.py
执行后会生成 settings.py.bak,同时修改 settings.py。后缀可自定义,比如 .orig 或 .20261009。
批量替换目录下多个文件
结合 find 命令递归处理:
find /path/to/dir -type f -name "*.conf" -exec sed -i 's/listen 80/listen 8080/g' {} +
要点:
- -type f 确保只处理普通文件,跳过目录、链接、设备文件;
- -name "*.conf" 可按扩展名过滤,如去掉这句就是处理所有文件;
-
{} + 比
{} \;更高效,能一次传多个文件给 sed; - 若要排除某个子目录(比如
node_modules),加-not -path "./node_modules/*"。
其他实用变体
遇到特殊需求时可灵活调整:
-
忽略大小写:加
i标志,如sed -i 's/error/warning/gi' app.log; -
只替换某几行:比如第 5 到第 10 行,
sed -i '5,10s/old/new/g' file.txt; -
用变量替换(适合写脚本):
OLD="v1.2"; NEW="v2.0"; sed -i "s/$OLD/$NEW/g" version.txt(注意用双引号); -
正则增强匹配:如替换带数字的 ID:
sed -i 's/ID:[0-9]\+/ID:100/g' data.json。











