2013-04-11 67 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