如何根据特定日期和时间计算文本文件中包含单词 -> [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
将匹配包含任何字符a
、b
、c
、e
、j
、m
、o
、v
、N
、 空格和句点的任何行.
,无论它们在行上的位置如何(可能与日志文件的每一行匹配)。
您需要转义[
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
这是不太可能的,因为这样您可能不需要首先计算发生的次数。在这种情况下,您可以尝试调整以下一些答案: