[英]Extracting certain pattern from log using Java
我想从日志文件中提取一条信息。 我使用的模式是节点名称和命令的提示。 我想提取命令输出的信息并进行比较。 考虑以下示例输出
NodeName > command1
this is the sample output
NodeName > command2
this is the sample output
我尝试了以下代码。
public static void searchcommand( String strLineString)
{
String searchFor = "Nodename> command1";
String endStr = "Nodename";
String op="";
int end=0;
int len = searchFor.length();
int result = 0;
if (len > 0) {
int start = strLineString.indexOf(searchFor);
while(start!=-1){
end = strLineString.indexOf(endStr,start+len);
if(end!=-1){
op=strLineString.substring(start, end);
}else{
op=strLineString.substring(start, strLineString.length());
}
String[] arr = op.split("%%%%%%%");
for (String z : arr) {
System.out.println(z);
}
start = strLineString.indexOf(searchFor,start+len);
}
}
}
问题在于代码太慢而无法提取数据。 是否有任何其他的方式来做到这一点?
编辑1它是我在以上代码中以字符串形式读取的日志文件。
我的建议..
public static void main(String[] args) {
String log = "NodeName > command1 \n" + "this is the sample output \n"
+ "NodeName > command2 \n" + "this is the sample output";
String lines[] = log.split("\\r?\\n");
boolean record = false;
String statements = "";
for (int j = 0; j < lines.length; j++) {
String line = lines[j];
if(line.startsWith("NodeName")){
if(record){
//process your statement
System.out.println(statements);
}
record = !record;
statements = ""; // Reset statement
continue;
}
if(record){
statements += line;
}
}
}
这是我的建议:
使用正则表达式。 这是一个:
final String input = " NodeName > command1\n" +
"\n" +
" this is the sample output1 \n" +
"\n" +
" NodeName > command2 \n" +
"\n" +
" this is the sample output2";
final String regex = ".*?NodeName > command(\\d)(.*?)(?=NodeName|\\z)";
final Matcher matcher = Pattern.compile(regex, Pattern.DOTALL).matcher(input);
while(matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2).trim());
}
输出:
1
this is the sample output1
2
this is the sample output2
因此,分解正则表达式:
首先,它跳过所有符号,直到找到第一个“ NodeName> command”,然后是一个数字。 我们想要保留此数字,以了解哪个命令创建了输出。 接下来,获取以下所有符号,直到(使用超前方式)找到另一个NodeName或输入的结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.