startTime과 endTime 사이의 출력 로그 줄

startTime과 endTime 사이의 출력 로그 줄

내용이 포함된 로그 파일이 있다고 가정하면 다음과 같습니다 app.log.

2018-08-29 07:43:17.123-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:43:17.456-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:44:18.789-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:44:18.779-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:45:19.433-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:45:19.998-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:46:20.658-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:46:20.774-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.

매개변수로 지정한 타임스탬프 범위 사이의 로그 라인을 가져오고 싶습니다.

로그 줄은 타임스탬프로 시작하는 단 한 줄이 아닙니다. 이 줄 뒤에는 타임스탬프가 다른 다음 줄이 나타날 때까지 추가 정보가 옵니다.

따라서 우리의 예에서는:

2018-08-29 07:43:17.123-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.

1 로그 라인입니다.

그래서 나는 some command 2018-08-29 07:44:00.000 2018-08-29 07:46:00.000 app.log반환될 것을 실행하고 싶습니다.

2018-08-29 07:44:18.789-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:44:18.779-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:45:19.433-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:45:19.998-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.

또한 매개변수가 반드시 로그 파일에 존재하는 것은 아닙니다.

답변1

sed '1,/pattern1/d;/pattern2/,$d' app.log문제를 해결해야 한다

언급한 대로 스크립트로 실행하려면 ~/.bashrc의 함수는 다음과 같습니다.

time_log() {
    pattern1=$1
    pattern2=$2
    file=$3
    sed "1,/$pattern1/d;/$pattern2/,$d" "$file"
}

그런 다음 다음을 실행할 수 있습니다.

time_log "2018-08-29 07:44:" "2018-08-29 07:46:" app.log

편집하다:

불필요한 제거됨cat

첫 번째 줄을 포함하려면 가장 쉬운 방법은 grep실행하기 전에 포함시키는 것 입니다 sed.

time_log() {
    pattern1=$1
    pattern2=$2
    file=$3
    grep "$pattern1" "$file"
    sed "1,/$pattern1/d;/$pattern2/,$d" "$file"
}

sedsed 전문가가 개입한다면 이를 수행하는 더 좋은 방법이 있을 수 있습니다.

관련 정보