在成千上万的文件中搜索并替换数百个字符串?

C J*_*son 5 regex replace

我正在研究在我工作的(C/C++)项目中更改数百个文件的文件名.问题是我们的软件有成千上万的文件,包括(即#include)这些数百个将被改变的文件.这看起来像是一场维护噩梦.如果我这样做,我将被困在Ultra-Edit中数周,手动滚动数百个正则表达式:

^\#include.*["<\\/]stupid_name.*$
Run Code Online (Sandbox Code Playgroud)

#include <dir/new_name.h>
Run Code Online (Sandbox Code Playgroud)

这种苦差事要比用勺子在南极的沉没潜艇中剥掉数百个土豆更糟糕.我认为将输入和输出放入如下表格中是理想的:

stupid_name.h <-> <dir/new_name.h>
stupid_nameb.h <-> <dir/new_nameb.h>
stupid_namec.h <-> <dir/new_namec.h>
Run Code Online (Sandbox Code Playgroud)

并将其提供给正则表达式引擎/工具/ app /等...

我的终极问题:是否有工具可以做到这一点?

奖金问题:它是多线程的吗?

我在这个网站上查看了很多搜索和替换主题,并找到了许多标准查询,询问了以下问题的变体:

标准问题:替换N个文件中的一个术语.

而不是:

我的问题:替换N个文件中的N个术语.

提前感谢您的回复.

Bet*_*eta 1

正如 Mark Wilkins 所说,无论您喜欢什么方便的正则表达式脚本工具,这都是一个可行的计划,但我建议补充几点:

  1. 使用两个脚本:一个将列表转换为正则表达式,另一个用于应用它们。试图在一个脚本中完成这两项工作是自找麻烦。
  2. 不要忘记更改 #include 指令并同时重命名头文件。
  3. 如果您知道如何更改 N 个文件中的一件事,那么,哎呀,您可以循环遍历您想要更改的 K 件事。就处理器时间而言,这不是最有效的方法,但这不是这里的瓶颈。
  4. 这种方法在理论上是有效的,但如果它在第一次尝试时在实践中有效,那么你的代码库比我见过的任何东西(那个大小)都干净。几乎肯定会出现一些小意外:硬编码路径与正则表达式不匹配,坏名称与好名称冲突,以及其他一些没人会想到的故障。我建议从小处开始,使用一到两对名称,每次替换后进行编译,并在出现问题时撤退。如果您做得正确,您可以将其设置为过夜运行,早上您将拥有一个几乎完成的工作代码库,以及引起麻烦并需要人工关注的名称列表。