在 Linux/Unix Shell 中进行批量替换
在命令行中,我们通常使用 sed (Stream Editor) 命令来对文本进行查找和替换。sed 功能非常强大,可以处理文件或输入流中的文本。

核心命令:sed
sed 的基本替换语法是:
sed 's/要查找的字符串/替换后的字符串/g' 文件名
s: 表示 substitute (替换)。g: 表示 global (全局),即替换一行中所有的匹配项,如果省略g,则只替换每行中第一个匹配项。
示例
假设我们有一个文件 test.txt如下:
hello world
hello everyone
this is a test file for hello
基础替换:将 "hello" 替换为 "hi"
sed 's/hello/hi/g' test.txt
输出结果:

hi world
hi everyone
this is a test file for hi
注意: 这个命令默认不会修改原文件,只是在终端显示替换后的结果,原文件 test.txt 内容不变。
直接在原文件上修改(原地替换)
使用 -i 选项可以直接修改源文件,非常方便,但请务必小心,特别是对于重要文件。
# 在 macOS 上,有时需要备份文件,语法为 sed -i '' 's/hello/hi/g' test.txt # 在 Linux 上,直接使用: sed -i 's/hello/hi/g' test.txt
执行后,test.txt 文件的内容就会被永久修改。

备份并修改文件
为了安全起见,可以在修改前创建一个备份文件。-i 选项可以指定备份文件的后缀。
sed -i.bak 's/hello/hi/g' test.txt
这个命令会:
- 将替换后的内容写入
test.txt。 - 同时将原始内容备份到
test.txt.bak文件中。
只替换每行中的第一个匹配项
去掉 g 标志即可。
sed 's/hello/hi/' test.txt
输出结果:
hi world
hi everyone
this is a test file for hello
可以看到,第三行只替换了第一个 "hello"。
在文本编辑器中进行替换
Vim / Vi
在 Vim 中,有几种替换方式:
a) 当前光标所在行的替换
s/old/new/g替换当前光标所在行的所有old为new。s/old/new/替换当前光标所在行的第一个old为new。
b) 全文替换
%s/old/new/g替换整个文件中的所有old为new。%s/old/new/c替换整个文件中的所有old为new,但在每次替换前都会要求你确认 (c)onfirm。
c) 指定范围替换
10,20s/old/new/g替换从第 10 行到第 20 行的所有old为new。.,$s/old/new/g替换从当前行 (.) 到文件末行 ($) 的所有old为new。
d) 高级替换(使用正则表达式)
Vim 的替换支持强大的正则表达式。
- 忽略大小写:
%s/hello/hi/gi中的i表示忽略大小写。 - 使用捕获组:
%s/\(hello\) world/\1 everyone/g会将 "hello world" 替换为 "hello everyone"。\1代表第一个捕获组的内容。
VS Code
在 VS Code 中进行替换非常直观:
-
打开查找和替换面板:
- 快捷键:
Ctrl + H(Windows/Linux) 或Cmd + H(macOS)。 - 或者点击编辑器左下角的放大镜图标,然后切换到替换选项卡。
- 快捷键:
-
:
- 在 查找 框中输入你要被替换的文本。
- 在 替换 框中输入新的文本。
-
执行替换:
- 替换下一个:只替换当前光标处找到的第一个匹配项。
- 全部替换:替换文件中所有匹配的项。
- 在文件中替换:替换当前打开的文件中所有匹配项。
- 在项目中替换:替换整个工作区/项目中所有匹配的文件中的内容。
VS Code 同样支持正则表达式,可以点击查找框右侧的 图标来开启。
在编程语言中
几乎所有的编程语言都内置了字符串替换功能。
Python 示例:
text = "hello world, hello everyone"
new_text = text.replace("hello", "hi")
print(new_text)
# 输出: hi world, hi everyone
JavaScript 示例:
let text = "hello world, hello everyone"; let new_text = text.replace(/hello/g, "hi"); // 使用正则表达式 /g 表示全局替换 console.log(new_text); // 输出: hi world, hi everyone
总结与对比
| 场景 | 命令/工具 | 语法/操作 | 特点 |
|---|---|---|---|
| Shell 批处理 | sed |
sed 's/old/new/g' file |
功能强大,适合脚本自动化,处理大量文件。 |
| Vim 编辑器 | s |
%s/old/new/g |
在编辑器内快速操作,支持正则表达式和范围选择。 |
| VS Code 编辑器 | 查找替换面板 | Ctrl + H |
图形化界面,直观易用,支持项目和文件范围查找。 |
| 编程语言 | replace() 方法 |
text.replace("old", "new") |
在代码逻辑中进行精确的字符串处理。 |
选择哪个命令?
- 如果是在服务器上,需要对大量文件进行自动化处理,请使用
sed。 - 如果你正在使用 Vim 编辑器,请使用 Vim 的
s命令,效率最高。 - 如果你在使用现代的图形化编辑器(如 VS Code, Sublime Text),请使用图形化查找替换面板。
- 如果你在写代码,请使用对应编程语言的字符串替换方法。
