3

我在一个项目中有大约 600 个 Java 类,它们的名称是随机的(它们的名称中没有模式)。

我想用另一行替换这些类中的特定行。

例如,这些文件中的行是

System.out.println("Product is: "+myProduct);

我想用

System.out.println("Object is: "+myObject);

上面的行只是一个例子,展示了我想要实现的目标。

我正在使用 RAD 7.5 进行开发。

有没有一种简单的方法可以一次在所有 600 个文件中执行此操作?

4

2 回答 2

3

是的。通过打开 Search - File... 对话框,输入您要搜索的内容和所需的文件过滤器,然后单击Replace

于 2012-12-22T16:31:50.053 回答
1

不,不能访问 UNIX 系统。

这是你的第一个问题。安装Cygwin让你有一个坚实的外壳,然后你可以学习如何对源代码进行批处理操作。能够grep轻松解决问题可以更轻松地学习大型代码库,并减少可能导致棘手问题的代码量。

一旦你安装了它,你可以解决你的直接问题

perl -i.bak \
  -pe 's/System.out.println\("Product is: "+myProduct\);/System.out.println("Object is: "+myObject);/' \
  file0.java file1.java ...

分解它:

  1. -i意味着将参数视为文件以就地修改
  2. .bak意味着在进行更改之前制作带有.bak扩展名的输入文件的副本
  3. -p意味着将程序包装在一个循环中,该循环抓取一行,运行程序并打印该行
  4. -e 's/.../.../'表示引用的部分是要运行的程序,它会进行正则表达式替换。
  5. 其余的是运行它的文件。

或者,

find . -name \*.java

应该列出当前目录下的所有 java 源文件。

假设该目录的路径中没有空格,那么您可以执行

find . -name \*.java | xargs perl -i.bak -pe 's/.../.../'

其中...是上面的替换以在工作目录下的所有 Java 源上运行它。

于 2012-12-22T16:32:51.747 回答