(로그) 파일에 검색 패턴이 없어도 검색 패턴보다 큰 날짜만 표시됩니다.

(로그) 파일에 검색 패턴이 없어도 검색 패턴보다 큰 날짜만 표시됩니다.

특정 검색 패턴보다 큰 날짜에 대해 시스템 로그를 검색하고 싶습니다. 예를 들어 날짜가 JAN 6 16:24:00. sed()를 사용할 수 있다는 것을 알고 있지만 sed -n '/JAN 6 16:24:00/,$p' ${LOGFILE}이는 내가 지정한 정확한 날짜에 대한 항목이 있는 경우에만 작동합니다 sed. 로그 파일에 정확한 날짜에 대한 항목이 포함되어 있지 않으면 JAN 6 16:24:00실제 항목이 없기 때문에 출력을 얻을 수 없습니다. 논리에서는 문자열만 비교됩니다.

알아요. journalctl --since "XXX"하지만 이것은 아마도 SystemD 기반이 아닌 호스트에서 작동할 것입니다. 하지만 기본적으로 이 기능이 필요합니다.

X"전통적인" GNU 도구를 사용 하여 가정된 로그 파일에 포함되지 않은 날짜보다 최신인 로그 파일의 모든 항목을 인쇄하는 방법이 있습니까 ?X

답변1

로그가 다음과 같이 더 유용한 형식인 경우:

2021-01-06 16:24:00 log text

다음을 수행할 수 있습니다.

awk '$0 >= "2021-01-06 16:24:00"'

그런데 여기서는 연도도 지정하지 않고 영문 월 이름 약어를 사용하여 날짜 형식을 지정하기 때문에 더 복잡합니다.

Date::Parse타임스탬프 형식을 이해하고 연도 없는 타임스탬프를 perl 모듈 과 같이 과거에 가장 최근에 발생한 타임스탬프로 해석하는 날짜 구문 분석기를 사용하는 것이 더 나을 것입니다 .

<yourfile.log perl -MDate::Parse -ne '
  BEGIN{$start = str2time("2021-01-06 16:24")}
  print if str2time(substr($_, 0, 15)) >= $start'

연도가 없는 날짜의 경우 날짜가 이번 달의 날짜가 아닌 한 Date::Parses는 str2time과거 날짜를 제공하는 것으로 보입니다. 예를 들어 2022년 1월 15일에 실행되는 경우 '2월 2일'은 2021-02-02로 해석되고 '1월 31일'은 2022-01-31로 해석됩니다.

관련 정보