Linux文本替换以sed为核心,配合grep定位、find扩展范围;需备份文件,-i选项支持就地编辑并可加.bak后缀备份;支持全局(g)、忽略大小写(I)等标志;路径替换可换分隔符;多文件用grep -rl或find筛选后处理;Vim中可用:%s命令交互替换。

Linux 中查找并替换文本,核心靠 sed(流编辑器),配合 grep 定位、find 扩展范围,是最常用且高效的组合。操作前务必备份关键文件,尤其是使用 -i 直接修改时。
单文件基础替换
默认不改原文件,仅输出结果到终端,适合预览:
-
sed 's/旧字符串/新字符串/' 文件名—— 只替换每行第一个匹配项 -
sed 's/旧字符串/新字符串/g' 文件名——g表示全局,替换每行所有出现位置 -
sed 's/旧字符串/新字符串/I' 文件名——I忽略大小写(如匹配 apple、Apple、APPLE)
直接修改文件(就地编辑)
加 -i 选项可写回原文件,强烈建议带备份后缀:
-
sed -i 's/foo/bar/g' config.txt—— 直接修改,无备份 -
sed -i.bak 's/foo/bar/g' config.txt—— 自动创建config.txt.bak原始副本 - 若替换内容含斜杠(如路径),换分隔符更安全:
sed -i 's#/usr/bin#/opt/bin#g' script.sh
多文件批量处理
先用 grep -rl 精准定位再替换,避免误操作:
- 查出所有含目标字符串的文件:
grep -rl "DEBUG = True" ./src/ - 对这些文件统一替换:
grep -rl "DEBUG = True" ./src/ | xargs sed -i 's/DEBUG = True/DEBUG = False/g' - 用
find按类型处理:find ./conf -name "*.yml" -exec sed -i 's/http:/https:/g' {} \;
Vim 中交互式替换(适合小范围或需确认)
打开文件后,在命令模式下输入:
-
:%s/old/new/g—— 全局替换整篇文档 -
:%s/old/new/gc——c表示每次替换前询问确认 -
:20,30s/old/new/g—— 仅替换第 20 到 30 行 -
/pattern向前搜索,n跳到下一个,N返回上一个


















