특정 날짜 및 시간을 기준으로 -> [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
공백 및 마침표를 포함하는 모든 행과 일치합니다 (로그 파일의 모든 행과 일치할 수 있음)..
탈출 [
해서 ]
좋아 해야지
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
처음에 발생 횟수를 계산할 필요가 없기 때문에 이는 가능성이 낮습니다. 이 경우 아래 답변 중 일부를 적용해 볼 수 있습니다.