【问题标题】:Replacing a line in a large number of java source files在大量java源文件中替换一行
【发布时间】:2012-12-22 16:27:31
【问题描述】:

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

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

例如这些文件中的行是

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

我想用

替换那行
System.out.println("Object is: "+myObject);

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

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

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

【问题讨论】:

  • 您可以访问 UNIX 系统吗? (或适用于 UNIX 的 Windows 模拟器。)如果是这样,您可以使用 find 命令并链接它来替换。
  • @JeanneBoyarsky:不。不能访问 UNIX 系统。
  • 那么建议使用 JB Nizet。 (我现在实际上忘记了 Eclipse 这样做了,因为我很少需要在 Windows 上进行全局搜索/替换。)

标签: java eclipse rad


【解决方案1】:

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

【讨论】:

  • 确保您在包资源管理器中选择了项目/包,这样它就不会只针对一个文件。
【解决方案2】:

没有。无法访问 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 源代码上运行它。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2013-09-02
    • 1970-01-01
    • 2012-11-24
    • 2018-11-24
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多