일정 시간 범위에 대해 sed 명령 매개변수 설정

일정 시간 범위에 대해 sed 명령 매개변수 설정

이것은 매우 큰 로그 파일에서 추출하려는 샘플 로그 파일입니다.

2017-05-30 23:11:34,629 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking auth agent [accountName=rene1 remoteAddress=STEDGE/172.16.8.3]
2017-05-30 23:11:14,638 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: "rene1".
2017-05-30 23:10:54,663 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.KeyboardInteractiveAuthentication - SSH: Sent SSH_MSG_USERAUTH_INFO_REQUEST (Password Authentication): 
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - User login attempt has been made from address /172.16.8.1:58222
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking config agent [accountName=rene1 remoteAddress=/172.16.8.1]
2017-05-30 23:10:36,446 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Config agent success [accountName=rene1 remoteAddress=/172.16.8.1]



를 사용 23:10:36하여 전체 로그 덩어리를 추출하고 싶지만 실패합니다. 나는 테스트 했고23:11:34sedgrepawk 예상한 결과에 대한 희망은 없었습니다. 23:10:36내가 예상한 결과가 아닌 발생한 로그만 알려주는 것뿐입니다.이것이 내 명령입니다.

sed -n '/23:10:36/,/23:11:34/p' stlog.txt



이것이 작동하도록 하는 방법을 아는 사람이 있나요? 내 프로그램은 현재 시스템 시간만 가져오고 현재 시스템 시간에 대해서만 로그 기반을 쿼리하기 때문에 날짜 없이 시간만 포함됩니다.

답변1

여기서는 두 가지 문제를 볼 수 있습니다. 1) 로그가 역순으로 되어 있는 것 같습니다. 2) "끝" 패턴과 일치하는 행이 여러 개 있습니다.

(마지막 줄의 23:10:36,446은 마지막에서 두 번째 줄의 23:10:36,415보다 늦습니다.)

역순으로 하면 23:10:36이후부터 일치하는 줄만 얻을 수 있습니다.sed23:11:34 일치하는 줄만 얻을 수 있고, 거기에 없는 을 볼 때까지 계속됩니다 .

아래와 같이 패턴을 반전시키는 것이 해결책처럼 보이지만, 해당 패턴이 처음 보일 때 인쇄가 중지되므로 끝 패턴과 일치하는 첫 번째 줄만 얻을 수 있습니다.

sed -n '/23:11:34/,/23:10:36/p' stlog.txt

awk해당 문제를 해결할 수 있는 솔루션은 다음과 같습니다 .

awk -vstart="23:11:34" -vend="23:10:36" \
  '$0 ~ start {p=1} $0 ~ end {e=1} e && $0 !~ end {p=0} p' stlog.txt 

변수p 인쇄를 제어하고 "종료" 패턴이 표시된 후에만 지워집니다( eis 1).그리고현재 줄은 더 이상 해당 패턴과 일치하지 않습니다.

관련 정보