mac@sed替换文本内容

在 macOS 上使用 sed 命令替换文本时,需要注意 macOS 自带的 sed(基于 BSD)与 Linux 上常见的 GNU sed 有一些差异,尤其是在 -i 参数的用法上。

基本语法(macOS BSD sed)

1
sed -i '' 's/原字符串/新字符串/g' 文件名
  • -i '' 表示就地替换(in-place),并且不创建备份。如果想创建备份,比如 .bak,可以写 -i '.bak'

  • 's/原/新/g' 是 sed 的替换命令:

    • s 表示 substitute(替换);
    • /g 表示全局替换(每行匹配多次的会全部替换)。

mac sed示例

1. 替换文件中所有的 foo 为 bar

1
sed -i '' 's/foo/bar/g' example.txt

2. 替换并创建备份文件 example.txt.bak

1
sed -i '.bak' 's/foo/bar/g' example.txt

3.多个文件批量替换

可以配合 findgrep 使用。例如:

1
find . -name "*.txt" -exec sed -i '' 's/foo/bar/g' {} +

或者使用 xargs

1
grep -rl 'foo' . | xargs sed -i '' 's/foo/bar/g'