Linux 根据特定日期和时间戳计算文本文件中特定单词出现的行数

Linux 根据特定日期和时间戳计算文本文件中特定单词出现的行数

如何根据特定日期和时间计算文本文件中包含单词 -> [com.java.Name abc] <- 的行数

我在下面尝试过,但仅显示 1 的值。预计有4条线。它应该基于行数而不是单词数。我怎样才能提及日期和时间

grep -c '[com.java.Name abc]' server.log | wc -l

下面是示例文件

2020-06-14 13:46:10,442 INFO  [com.java.Name abc] [com.java.Name abc]
2020-06-14 13:46:20,420 INFO  [com.java.Name abc]
2020-06-14 13:47:14,410 INFO  [com.java.Name abc]
2020-06-14 13:48:12,442 INFO  [com.java.Name abc]

答案1

grep-c选项已经进行了计数。所以 的结果grep是一个数字。因此wc当然只会找到一行。只需完全删除wc即可。

答案2

您的方法的问题在于您正在寻找包含[和 的模式]。它们在正则表达式中具有特殊含义,即它们是“字符列表”并匹配其中包含的任何字符。所以,表演

grep '[com.java.Name abc]' logfile

将匹配包含任何字符abcejmovN、 空格和句点的任何行.,无论它们在行上的位置如何(可能与日志文件的每一行匹配)。

您需要转义[and ],如

grep -c '\[com.java.Name abc\]' logfile

或者 - 正如@terdon 所指出的 - 使用该-F标志:

grep -c -F '[com.java.Name abc]' logfile

如果您想查找某个日期发生的事件,则取决于具体的机制。如果你知道那一天,比如说2020-06-14,这可能就像陈述一样简单

grep -c '^2020-06-14.*\[com.java.Name abc\]' logfile

如果您想根据完整时间戳进行搜索,则只有当您知道精确的日志文件中格式化的时刻,如下所示

grep -c '^2020-06-14 13:48:12,442.*\[com.java.Name abc\]' logfile

这是不太可能的,因为这样您可能不需要首先计算发生的次数。在这种情况下,您可以尝试调整以下一些答案:

相关内容