我试图在Scala中获得与在Mac / Linux中运行以下命令相同的输出:
ps -ef | egrep "(mongo|mysql|rabbitmq)"
这是我的实施,但我正在寻找一个优雅的。
import sys.process._
import scala.collection.mutable.HashSet
object Regex {
val set = new HashSet[String]
val logger = ProcessLogger(
(o: String) => """(mysql|mongo|rabbitmq)""".r findAllIn o foreach (set += _),
(e: String) => println(e))
"ps -ef " ! logger
println(set)
}
我尝试的另一种方法是调用"开始" ProcessLogger中的函数但无法使其正常工作。
val Procs = """(mysql|mongo|rabbitmq)""".r
def started(i: String) = i match {
case Procs(p) => p
case _ => null
}
感谢。
答案 0 :(得分:2)
您可以使用Source
并使用常规收集方法逐行处理输出:
io.Source
.fromString("ps -ef".!!)
.getLines()
.filter(_.matches(".*(mysql|mongo).*"))
.foreach(println)
答案 1 :(得分:1)
Seq("bash", "-c", """ps -ef | egrep "(mongo|mysql|rabbitmq)"""").!