Editor 批量编辑,但不是所有位置(grep?sed?awk?vim?)
我有一个相对较大的代码库,希望在整个代码中进行类似的更改 我有一大堆这样的台词Editor 批量编辑,但不是所有位置(grep?sed?awk?vim?),editor,grep,Editor,Grep,我有一个相对较大的代码库,希望在整个代码中进行类似的更改 我有一大堆这样的台词 $options = new Options(); 我想把它们换成 $options = Options::getInstance(); 但在一些地方我有 $options = new Options('alternate_options_file.txt') 那些,我想离开 此外,我预计未来会有更多类似的变化 我希望有一种方法可以在整个代码库中进行更改,而不必手动触摸每个文件。在这种情况下,我可以轻松地创建一
$options = new Options();
我想把它们换成
$options = Options::getInstance();
但在一些地方我有
$options = new Options('alternate_options_file.txt')
那些,我想离开
此外,我预计未来会有更多类似的变化
我希望有一种方法可以在整个代码库中进行更改,而不必手动触摸每个文件。在这种情况下,我可以轻松地创建一个正则表达式,只捕获我想要的正则表达式。但接下来肯定会有更复杂的版本。我想要一个通用的解决方案,使我能够:
现在,我的最佳选择似乎是从vim内部使用
ack
,录制一个宏,然后使用:cnext
,并在适当的情况下应用宏。不过,可能还有更好的选择。sed模式会是
s/\$options = new Options();/\$options = Options::getInstance();/g
要就地应用它,请在Linux上运行sed-i
,或在BSD/Mac上运行sed-i.bak
,然后删除备份)。要将自己限制为PHP文件,并且可能只接触带有行的文件,请尝试以下操作:
find . -name "*.php" | xargs grep -l "\$options = new Options();" | xargs sed -i 's/\$options = new Options();/\$options = Options::getInstance();/g'
如果文件名中有空格等,请尝试find-名称“*.php”-print0 | xargs-0 sed…
确保首先备份所有内容。如果您使用的是源代码管理(对吗?),并且在进行更改之前已经提交了所有内容,那么您应该可以
s/\$options = new Options();/\$options = Options::getInstance();/g
要就地应用它,请在Linux上运行sed-i
,或在BSD/Mac上运行sed-i.bak
,然后删除备份)。要将自己限制为PHP文件,并且可能只接触带有行的文件,请尝试以下操作:
find . -name "*.php" | xargs grep -l "\$options = new Options();" | xargs sed -i 's/\$options = new Options();/\$options = Options::getInstance();/g'
如果文件名中有空格等,请尝试find-名称“*.php”-print0 | xargs-0 sed…
确保首先备份所有内容。如果您使用的是源代码管理(对吗?),并且在进行更改之前已经提交了所有内容,那么您应该没问题。
Vim可以跨文件交互替换文本,如:
:args **/*.php
:argdo %s/new Options()/Options::getInstance()/gec | update
我还建议您在尝试此操作之前提交整个代码库。
小心不要把你的存储库搞砸。
Vim可以跨文件交互替换文本,如:
:args **/*.php
:argdo %s/new Options()/Options::getInstance()/gec | update
我还建议您在尝试此操作之前提交整个代码库。
当心不要把你的存储库搞砸。Hmm。。。但这需要你设计一个正则表达式,它包含或排除你想要的目标。我想要一个能让你互动选择的答案。嗯。。。但这需要你设计一个正则表达式,它包含或排除你想要的目标。我想要一个能让你互动选择的答案。我不知道args/argdo。这看起来正是我所需要的。为了加快速度,我现在正在运行
ack-l'new\s*Options()'| xargs mvim
,这为我提供了一个新窗口,其中args设置为仅包含目标字符串的文件。我不知道args/argdo。这看起来正是我需要的。为了加快速度,我现在正在运行ack-l'new\s*Options()'| xargs mvim
,这为我提供了一个新窗口,其中args设置为仅包含目标字符串的文件。