Java 如何在两个文本之间用like进行grep
我有一个日志文件,其中包含以下数据:Java 如何在两个文本之间用like进行grep,java,unix,Java,Unix,我有一个日志文件,其中包含以下数据: Customer=100000015 | AP ID=100000687 | StepID=N6MAAPtCzVYKFKVKMMQ | OA=107 | Activity=NegotiateProductConfigurationSyncImplAug | *** Starting Rule Debug Messages March 11, 2016 6:47:23 PM IST *** 我知道StepID,但不知道OA和活动名称 我想在grep上做一个类
Customer=100000015 | AP ID=100000687 | StepID=N6MAAPtCzVYKFKVKMMQ | OA=107 | Activity=NegotiateProductConfigurationSyncImplAug | *** Starting Rule Debug Messages March 11, 2016 6:47:23 PM IST ***
我知道StepID,但不知道OA和活动名称
我想在grep上做一个类似的操作,在这行之后获取所有内容
我将传递StepID和“***启动规则调试消息”以匹配行。这可能是一种方法:
- 逐行迭代文件
- 查找StepID表达式并记住结果
- 如果在过去有过成功,那么就抓住下面的每一行
所需的最终字符串stepId=“N6MAAPTCZVYKFKMMQ”;
最终列表allLines=Files.readAllLines(path.get(“/var/log/tool/output.log”)、StandardCharsets.UTF_8);
最终列表结果行=新建LinkedList();
布尔匹配=假;
用于(最后一行字符串:所有行){
if(行包含(“StepID=“+requiredStepId)){
匹配=真;
}
如果(匹配){
结果行。添加(行);
}
}
您可以使用:
匹配后显示N行:
-A是在匹配后打印指定N行的选项,如下所示
语法:
grep-Afinal String requiredStepId = "N6MAAPtCzVYKFKVKMMQ";
final List<String> allLines = Files.readAllLines(Paths.get("/var/log/tool/output.log"), StandardCharsets.UTF_8);
final List<String> resultLines = new LinkedList<>();
boolean match = false;
for (final String line : allLines) {
if (line.contains("StepID=" + requiredStepId)) {
match = true;
}
if (match) {
resultLines.add(line);
}
}