如何在进程输出中应用Scala中的正则表达式?

时间:2013-04-11 00:26:31

标签: regex scala

我试图在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
}

感谢。

2 个答案:

答案 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)"""").!