특정 검색 패턴보다 큰 날짜에 대해 시스템 로그를 검색하고 싶습니다. 예를 들어 날짜가 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::Parse
s는 str2time
과거 날짜를 제공하는 것으로 보입니다. 예를 들어 2022년 1월 15일에 실행되는 경우 '2월 2일'은 2021-02-02로 해석되고 '1월 31일'은 2022-01-31로 해석됩니다.