【发布时间】:2013-07-02 18:39:10
【问题描述】:
我正在尝试编写一个 Java 程序,它采用 Java 中的字符串并替换 perl 脚本中相应的文本序列。这是我的代码:
String sedFirstLine = "'s/AAA/"+newFirstLine+"/'";
String sedNewCntr = "'s/BBB/"+newCntr+"/'";
String sedNewSpacing = "'s/SPACE/"+newSpacing+"/'";
String sedNewDmax = "'s/MAX/"+newDmax+"/'";
String sedInputFile = "/filepath/myPerlScript.pl"
String sedOutputFile = "/filepath/myNewPerlScript.pl";
String[] cmdArray3 = {"sed", "-e", sedFirstLine,"-e", sedNewCntr,"-e", sedNewSpacing,"-e", sedNewDmax, "-e", sedInputFile, ">", sedOutputFile};
Process runCmd;
runCmd = Runtime.getRuntime().exec(cmdArray3);
当我运行这个程序时,没有生成输出文件“myNewPerlScript.pl”。我不确定我写的有什么问题。我之前提到的 Java 变量是“newFirstLine”、“newCntr”等。
【问题讨论】:
-
您的代码实际上从未引用
sedOutputFile或sedInputFile。您希望如何使用它们? -
您调用 sed 而不是用 Java 中已经存在的正则表达式进行替换的任何特殊原因?
-
我复制了旧版本的代码。对此很抱歉,但我只是在实际调用 sedOutputFile 和 sedInputFile 的地方对其进行了编辑。
-
我认为我必须使用“sed”来替换使用 UNIX 的文件中的文本。看起来真的很方便,但我只是无法让它与我的 Java 代码一起工作。
-
作为一般提示:阅读(并实施)所有When Runtime.exec() won't 的建议。那可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用
exec并使用ProcessBuilder构建Process。还要将String arg拆分为String[] args以说明本身包含空格的参数。
标签: java bash process sed runtime.exec