2

我正在重构一些代码,我决定将一个名称替换为另一个名称,比如说foo. bar它们出现在多个.cc.h文件中,所以我想更改:

Foo key(); 

Bar key();

就是这样,在Unix中替换所有出现的Fooby 。Bar并且文件位于同一目录中。我想过

sed -e {'s/Foo/Bar/g'}

但我不确定这是否会奏效。

4

5 回答 5

8

这应该可以解决问题:

sed -i'.bak' 's/\bFoo\b/Bar/g' *.files
于 2013-06-13T23:59:19.327 回答
1

我不经常使用 sed,但是如果您可以在命令行上访问 Perl(许多 unix 都这样做),您可以这样做:

perl -pi -e 's/Foo key/Bar key/g' `find ./ -name '*.h' -o -name '*.cc'`

这将(递归地)查找当前目录中以 .h 或 .cc 结尾的所有文件,然后使用 Perl 将每个文件中的 'Foo key' 替换为 'Bar key'。

于 2013-06-14T00:04:21.673 回答
1

我喜欢 Jaypal 的 sed 命令。它用于\b确保您只替换完整的单词(Foonot Foobar),并在出现问题时制作备份文件。

但是,如果您的所有文件都不在一个目录中,那么您将需要使用更复杂的方法将它们全部列出。使用 find 命令将它们全部发送到 sed:

 find . -print0 -regex '.*\.\(cc\|h\)' | xargs -0 sed -i'.bak' 's/\bFoo\b/Bar/g'
于 2013-06-14T00:06:44.990 回答
1

我会使用 sed:

sed -i.bak -e '/Foo/ s//Bar/g' /path/to/dir/*.cc

重复 *.h 文件

于 2013-06-13T23:59:26.297 回答
0

您可能已经安装了 perl(如果它是 UNIX),所以这里有一些适合您的东西:

perl -e "s/Foo/Bar/g;" -pi.save $(find path/to/DIRECTORY -type f)

请注意,这提供了原始文件的备份,如果您需要它作为保险。

否则,您可以执行@Kevin 提到的操作,只需使用 IDE 重构功能。

注意:我刚刚看到你在使用Vim ,这里有一个关于如何做的快速教程

于 2013-06-13T23:59:09.173 回答