2013-04-11 89 views
0

我试图让斯卡拉相同的输出,因为我有从Mac/Linux上运行下面的命令得到:如何在Scala中应用正则表达式处理输出?

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 
} 

谢谢。

回答

1
Seq("bash", "-c", """ps -ef | egrep "(mongo|mysql|rabbitmq)"""").! 
+0

正是我一直在寻找。谢谢。 – gosanjeev 2013-04-11 17:19:47

1

可以使用Source和使用常规的收集方法处理由线输出线:

io.Source 
    .fromString("ps -ef".!!) 
    .getLines() 
    .filter(_.matches(".*(mysql|mongo).*")) 
    .foreach(println) 
+0

这非常有帮助。谢谢。 – gosanjeev 2013-04-11 17:24:47

+0

如何在不等待命令完成的情况下完成此任务? – 2017-11-20 15:31:07