Mac OSX - 如何在整个目录中搜索和替换特定文本?

Mac OSX - how do I do a search and replace across an entire directory for a particular text?

我有以下文件夹结构 -

Foo/
   y.c
   Bar/
      a.c
   Baz/
      b.c
   Pie/
      m.c
      Ham/
         x.c

我需要做的就是替换 Foo/ 目录中的每个 Alice() 实例,这是我当前的目录,并将其变成 Bob()。我在这个微不足道的问题上遇到了最困难的时期。

我试过以下变体:

find ./ -type f -print0 | xargs -0 sed -i ’s/Alice\(\)/Bob\(\)/g’
find ./ -type f -exec sed -i 's/Alice\(\)/Bob\(\)/g' '{}' \;
sed 's/Alice\(\)/Bob\(\)/g ' `grep -l -R 'Alice\(\)' .`

with exec 而不是 xargs 并且似乎会出现如下错误:

Can't do inplace edit: . is not a regular file.
sed: RE error: illegal byte sequence

等等。有人可以帮我吗?

Mac 内置 BSD sed 与 GNU sed 不同 sed.

BSD sed

/usr/bin/sed -i '' 's/foo/bar/g' input.txt

注意: 需要零长度 '' 才能就地编辑。

GNU sed

/usr/local/bin/sed -i 's/foo/bar/g' input.txt