输入
grep "Physical" /var/adm/syslog/syslog.log
输出
May 4 21:07:00 getz vmunix: Physical: 6289408 Kbytes, lockable: 4604660 Kbytes, available: 5417880 Kbytes
或从下方获取6289408
May 4 21:07:00 getz vmunix: Physical: 6289408 Kbytes
我只希望Physical:
的值只是数字,我怎样才能在简单的正则表达式中使用java(但我只需要正则表达式)?
注意:您可以为我测试正则表达式 here
更新
让我更清楚地说明问题。
我只需要以某种方式得到HPUXPARISC系统的物理内存,无论有没有正则表达式,我都需要从输出中得到 6289408 值
May 4 21:07:00 getz vmunix: Physical: 6289408 Kbytes, lockable: 4604660 Kbytes, available: 5417880 Kbytes
这是我使用命令grep "Physical" /var/adm/syslog/syslog.log
找出物理内存的输出
答案 0 :(得分:3)
使用awk
awk '{print $7}' input
6289408
切
cut -d" " -f7 input
perl的
perl -lane 'print $F[6]'
在您的更新中,您添加了java;这是一个有效的例子:
import java.util.regex.*;
public class SimpleRegexTest {
public static void main(String[] args)
{
String sampleText = " May 4 21:07:00 getz vmunix: Physical: 6289408 Kbytes, lockable: 4604660 Kbytes, available: 5417880 Kbytes";
String sampleRegex = "Physical: (\\d+)";
java.util.regex.Pattern p = java.util.regex.Pattern.compile(sampleRegex);
java.util.regex.Matcher m = p.matcher(sampleText);
if (m.find()) {
String matchedText = m.group(1);
System.out.println(matchedText);
} else {
System.out.println("didn't match");
}
}
}
给出:
$ java SimpleRegexTest
6289408
答案 1 :(得分:2)
捕获Physical: (\d+)
这是java解决方案:
public static void main(String[] args)
{
String input = " May 4 21:07:00 getz vmunix: Physical: 6289408 Kbytes, lockable: 4604660 Kbytes, available: 5417880 Kbytes";
String regex = "^.*Physical: (\\d*) .*$"; // <-- LOOK HERE FOR REGEX!
String physical = input.replaceAll(regex, "$1"); // <-- How to extract group 1 in java
System.out.println(physical); // "6289408"
}
如果您还需要捕获单位,请使用:
String physical = input.replaceAll("^.*Physical: (\\d*) (\\w*).*$", "$1 $2"); // "6289408 Kbytes"
答案 2 :(得分:0)
(物理\:\ S \ d {0,10}) 这比\ d +
更好