2008-11-15 44 views
3

我想grep for java进程,然后找到使用的最大堆内存。 我想这Groovy grep一个词

def ex =['sh','-c','ps -aef | grep Xmx'] 
String str = ex.execute().text 

而乙方拥有类似的java -Xmx1024M/KV /班/贝博/ -Xms512m 我如何提取价值1024M。我打算使用java正则表达式,但认为有人可能知道一个很酷的方式在groovy。

回答

5

下面是一个常规版本,不需要的grep(或sed的:):

("ps -aef".execute().text =~ /.*-Xmx([0-9]+M).*/).each { full, match -> println match } 
0

在Java:

String ResultString = null; 
Pattern regex = Pattern.compile("-Xmx(\\d+M)"); 
Matcher regexMatcher = regex.matcher(str); 
if (regexMatcher.find()) { 
    ResultString = regexMatcher.group(1); 
} 
0

如果你想要的是XMX后的值,你可以有一个返回到您从EX:

def ex =['sh','-c',"ps -aef | grep Xmx | sed -e 's/^.*Xmx\([0-9]*[mM]*\) *$/\1/'"]; 
String str = ex.execute().text; 

sed命令将变换的输出ps进入ps之后才返回的位。