linux运维批量替换关键在于一次写对,vim的:s命令配合正则与范围控制可精准处理配置文件等场景,如%s/old/new/g替换全文、10,20s/old/new/g替换指定行。

Linux 运维中做批量替换,关键不在“多按几次”,而在“一次写对、一次跑通”。vim 的 :s 命令配合正则和范围控制,能精准处理配置文件、日志、脚本等高频场景,比如把 500 行 Nginx 配置里的 http:// 全部换成 https://,或批量清理注释行。
掌握基础替换语法与常用范围
所有替换都从命令模式(按 Esc 确保)输入 : 开始:
-
:s/old/new/—— 替换当前行第一个匹配 -
:s/old/new/g—— 替换当前行所有匹配(g = global) -
:%s/old/new/g—— 替换全文所有匹配(% = 整个文件) -
:10,20s/old/new/g—— 替换第 10 到 20 行 -
:'s/old/new/g—— 替换可视模式选中的区域(先按 v 或 V 选中再输)
安全替换:确认、高亮与撤销
运维改配置最怕误操作,三招兜底:
- 加 c 标志:用
:%s/old/new/gc,每处替换前停顿并提示 y/n/a/q - 开启高亮:执行
:set hlsearch,所有匹配项实时标黄;临时清除高亮用:noh - 随时撤回:替换后发现不对,连按
u撤销;或用:q!强制退出不保存(未写入磁盘前有效)
处理特殊字符:路径、斜杠、点号不转义的技巧
直接写 :%s/usr/local/bin/usr/bin/g 会报错——因为 / 是默认分隔符。两种解法:
-
换分隔符:用
#、|、@等替代,如:%s#/usr/local/bin#/usr/bin#g -
转义特殊字符:点号
.、星号*、括号等需加反斜杠,如:%s/\/var\/log\/.*\.log/\/tmp\/backup.log/g - 需要匹配字面量
/时,写成\/;但换分隔符更清晰、少出错
进阶:正则匹配 + 实用场景示例
启用 \v(very magic)可简化正则写法,避免层层转义:
-
:%s/\v^\s*#.*$//g—— 删除所有纯注释行(行首任意空格 + # + 任意内容 + 行尾) -
:%s/\v^(\s*)if\s+\(.*\)\s*{/\1if (\2) {/g—— 统一 if 条件括号格式(用\1\2引用捕获组) -
:%s/\v(https?:\/\/)[^[:space:]]+/REDACTED/g—— 将所有 URL 替换为 REDACTED - 查所有 IP 地址:
/\(\ 和 <code>\>表示单词边界)











