如何在2个文本之间进行grep

时间:2016-02-26 11:50:46

标签: 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上做类似的事情来获取此行之后的所有内容。

就像我将传递StepID和“*** Starting Rule Debug Messages”以匹配该行。

2 个答案:

答案 0 :(得分:0)

这可能是一种方法:

  • 逐行遍历文件
  • 查找StepID表达式并记住结果
  • 如果过去有点击,那么捕获每一行

e.g。

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

答案 1 :(得分:0)

您可以使用:

匹配后显示N行:

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

语法: grep -A&lt; N> “string”FILENAME

以下示例打印匹配的行以及后面的3行。

$ grep -A 3 -i“example”demo_text

价:http://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/