shell中的egrep在shell成功时失败了

时间:2012-05-14 09:01:55

标签: java shell

我使用Java Runtime.exec()

运行egrep
String command = "egrep \'(Success|Loading\\.\\.\\.|Loaded : READY|Found a running instance)\' "+ instance.getPath() + "/log";
Runtime.getRuntime().exec(command);

stdout始终为null,stderr显示“egrep:Unmatched(或(”。)但是当我将命令复制到shell并运行时,它会返回正确的值。

2 个答案:

答案 0 :(得分:1)

解决方案非常简单:(Success|Loading\\.\\.\\.|Loaded不是有效的正则表达式。

使用Process.exec(String)时,无法使用引号保护空白区域。始终使用带有数组的exec()版本,或者更好的是使用ProcessBuilder

这样,您可以将每个参数作为单个Java String传递,空格和其他特殊字符不会产生任何问题。

答案 1 :(得分:0)

单引号不应转义。您也不能在命令行中转义它们,是吗?