macOS/Linux 文本替换

有时候我们需要将项目下的某个字符串全局替换成另一个字符串,可以借助 IDE 工具,当然也可以直接通过 grep + sed 命令完成。

单文件文本内容替换

sed -i "" "s/search/replace/g" filename

参数解析:

  • search: 需要被替换的文本
  • replace: 替换后的文本
  • filename: 需要进行文本替换的文件

示例:将当前目录下的 a.txt 文件中的 Apple 替换成 Pear

sed -i "" "s/Apple/Pear/g" ./a.txt

多文件文本内容替换

grep -rl "search" directory | xargs sed -i "" "s/search/replace/g"

参数解析:

  • search: 需要被替换的文本
  • directory: 需要进行文本替换操作的目录
  • replace: 替换后的文本

示例:将 Documents 目录下的所有文件的 Apple 替换成 Pear

grep -rl "Apple" ~/Documents | xargs sed -i "" "s/Apple/Pear/g"

转义字符

示例1:将 // 替换成 \\

grep -rl "//" ./ | xargs sed -i "" "s/\/\//\\\\\\\\/g"

Note

你可能已经注意到 -i 参数后面加了个空字符串(""),这是 macOS 平台下必须添加的,-i 参数后面必须跟一个字符串用来备份,空字符串表示不备份,如果省略该字符串则会报如下错误:

sed: 1: ".//a.txt": invalid command code .

Linux 平台请自行忽略 ""

当然,grep、sed 命令的用法远不止这些,更多用法请自行研究,这里给出菜鸟教程中对这两个命令的分别介绍: