我使用Java Runtime.exec()
运行egrepString command = "egrep \'(Success|Loading\\.\\.\\.|Loaded : READY|Found a running instance)\' "+ instance.getPath() + "/log";
Runtime.getRuntime().exec(command);
stdout始终为null,stderr显示“egrep:Unmatched(或(”。)但是当我将命令复制到shell并运行时,它会返回正确的值。
答案 0 :(得分:1)
解决方案非常简单:(Success|Loading\\.\\.\\.|Loaded
不是有效的正则表达式。
使用Process.exec(String)
时,无法使用引号保护空白区域。始终使用带有数组的exec()
版本,或者更好的是使用ProcessBuilder
。
这样,您可以将每个参数作为单个Java String传递,空格和其他特殊字符不会产生任何问题。
答案 1 :(得分:0)
单引号不应转义。您也不能在命令行中转义它们,是吗?