在整个目录中替换另一个单词 - unix

时间:2013-06-13 23:53:22

标签: regex unix

我正在重构一些代码,我决定用另一个名字替换另一个名字,让我们说foo bar。它们出现在多个.cc.h文件中,因此我想改为:

Foo key(); 

Bar key();

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

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

但我不确定这是否会起作用。

5 个答案:

答案 0 :(得分:8)

这应该可以解决问题:

sed -i'.bak' 's/\bFoo\b/Bar/g' *.files

答案 1 :(得分:1)

我会用sed:

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

重复* .h文件

答案 2 :(得分: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'。

答案 3 :(得分:1)

我喜欢Jaypal的sed命令。它使用\b来确保您只替换完整的单词(Foo而非Foobar),并在发生错误时生成备份文件。

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

 find . -print0 -regex '.*\.\(cc\|h\)' | xargs -0 sed -i'.bak' 's/\bFoo\b/Bar/g'

答案 4 :(得分:0)

您可能安装了perl(如果是UNIX),所以这里应该适合您:

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

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

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

注意:我刚看到你正在使用 Vim ,这里有一个快速 tutorial on how to do it