特定の日付と時刻に基づいて -> [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
当然1行しか検索されません。ただ完全に削除してくださいwc
。
答え2
[
アプローチの問題は、とを含むパターンを探していることです]
。これは正規表現で特別な意味を持ちます。つまり、「文字リスト」であり、その中に含まれるすべての文字と一致するということです。だからやってください
grep '[com.java.Name abc]' logfile
行内の位置に関係なく、文字、、、、、、、、、、スペース、a
ピリオドを含むすべての行と一致します(ログファイル内のすべての行と一致します)。b
c
e
j
m
o
v
N
.
脱出[
して]
好きなはず
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
最初に発生回数を計算する必要がないため、これは少ない可能性があります。この場合、以下の答えのいくつかを適用してみることができます。