我正在重构一些代码,我决定将一个名称替换为另一个名称,比如说foo
. bar
它们出现在多个.cc
和.h
文件中,所以我想更改:
Foo key();
至
Bar key();
就是这样,在Unix中替换所有出现的Foo
by 。Bar
并且文件位于同一目录中。我想过
sed -e {'s/Foo/Bar/g'}
但我不确定这是否会奏效。
这应该可以解决问题:
sed -i'.bak' 's/\bFoo\b/Bar/g' *.files
我不经常使用 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'。
我喜欢 Jaypal 的 sed 命令。它用于\b
确保您只替换完整的单词(Foo
not Foobar
),并在出现问题时制作备份文件。
但是,如果您的所有文件都不在一个目录中,那么您将需要使用更复杂的方法将它们全部列出。使用 find 命令将它们全部发送到 sed:
find . -print0 -regex '.*\.\(cc\|h\)' | xargs -0 sed -i'.bak' 's/\bFoo\b/Bar/g'
我会使用 sed:
sed -i.bak -e '/Foo/ s//Bar/g' /path/to/dir/*.cc
重复 *.h 文件
您可能已经安装了 perl(如果它是 UNIX),所以这里有一些适合您的东西:
perl -e "s/Foo/Bar/g;" -pi.save $(find path/to/DIRECTORY -type f)
请注意,这提供了原始文件的备份,如果您需要它作为保险。
否则,您可以执行@Kevin 提到的操作,只需使用 IDE 重构功能。
注意:我刚刚看到你在使用Vim ,这里有一个关于如何做的快速教程