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表达式并记住结果
  • 如果在过去有过成功,那么就抓住下面的每一行
e、 g

所需的最终字符串stepId=“N6MAAPTCZVYKFKMMQ”;
最终列表allLines=Files.readAllLines(path.get(“/var/log/tool/output.log”)、StandardCharsets.UTF_8);
最终列表结果行=新建LinkedList();
布尔匹配=假;
用于(最后一行字符串:所有行){
if(行包含(“StepID=“+requiredStepId)){
匹配=真;
}
如果(匹配){
结果行。添加(行);
}
}
您可以使用:

匹配后显示N行:

-A是在匹配后打印指定N行的选项,如下所示

语法: grep-A字符串文件名

下面的示例将打印匹配的行及其后的3行

$grep-一个3-i“示例”演示文本

参考:

final 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);
    }
}