Regex 在整个目录中用一个词替换另一个词-unix
我正在重构一些代码,我决定用另一个名称替换一个名称,比如说Regex 在整个目录中用一个词替换另一个词-unix,regex,unix,Regex,Unix,我正在重构一些代码,我决定用另一个名称替换一个名称,比如说foobybar。它们出现在多个.cc和.h文件中,因此我想更改为: Foo key(); 到 就是这样,在Unix中将所有出现的Foo替换为Bar。并且这些文件位于同一目录中。我想到 sed -e {'s/Foo/Bar/g'} 但是我不确定这是否会起作用。您可能已经安装了perl(如果是UNIX的话),所以这里有一些东西应该适合您: perl -e "s/Foo/Bar/g;" -pi.save $(find path/to/D
foo
bybar
。它们出现在多个.cc
和.h
文件中,因此我想更改为:
Foo key();
到
就是这样,在Unix中将所有出现的Foo
替换为Bar
。并且这些文件位于同一目录中。我想到
sed -e {'s/Foo/Bar/g'}
但是我不确定这是否会起作用。您可能已经安装了perl(如果是UNIX的话),所以这里有一些东西应该适合您:
perl -e "s/Foo/Bar/g;" -pi.save $(find path/to/DIRECTORY -type f)
注意,如果您需要作为保险的话,这将提供原始文件的备份
否则,您可以按照@Kevin所说的做,只需使用IDE重构功能
注意:我刚才看到您正在使用Vim,下面是一个快速的这应该可以做到:
sed -i'.bak' 's/\bFoo\b/Bar/g' *.files
我会使用sed:
sed -i.bak -e '/Foo/ s//Bar/g' /path/to/dir/*.cc
对*.h文件重复上述操作我不经常使用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
而不是Foobar
),并在出现问题时生成备份文件
但是,如果您的所有文件不在一个目录中,那么您需要使用更复杂的方法来列出它们。使用find命令将它们全部发送到sed:
find . -print0 -regex '.*\.\(cc\|h\)' | xargs -0 sed -i'.bak' 's/\bFoo\b/Bar/g'
使用具有重构功能的IDE。@Kevin我不能,我使用的是
VIM
,而且我远程登录到服务器。尽管我非常喜欢VIM,但使用s//
进行重构是相当危险的。至少在vim中打开它们,并在文件替换中执行:s/\/Bar/gc
@philippe-i
选项。如果出现问题,您将拥有原始文件的备份,该备份将重命名为具有.bak
扩展名。至少使用find-print0/xargs-0
,-exec
会更好
find . -print0 -regex '.*\.\(cc\|h\)' | xargs -0 sed -i'.bak' 's/\bFoo\b/Bar/g'