我正在重构一些代码,我决定用另一个名字替换另一个名字,让我们说foo
bar
。它们出现在多个.cc
和.h
文件中,因此我想改为:
Foo key();
到
Bar key();
就是这样,在Unix中用Foo
替换Bar
的所有出现次数。并且文件位于同一目录中。我想过
sed -e {'s/Foo/Bar/g'}
但我不确定这是否会起作用。
答案 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