![끝까지 로그 파일에서 마지막 일치 항목을 추출합니다.](https://linux55.com/image/48671/%EB%81%9D%EA%B9%8C%EC%A7%80%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%9D%BC%EC%B9%98%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
sed, grep, awk 또는 ruby를 사용하여 쉽게 찾을 수 있는 방법이 있습니까?마지막더 큰 로그 파일의 문자열을 일치시키고 그 뒤의 모든 줄(포함)을 다른 파일로 보내시겠습니까?
예:
grep -A222 "_____________" recent/toptrigs.OX.rb.log
내 최신 해결 방법은 222번째 줄부터 컨텍스트 포스트스크립트가 항상 EOF에 먼저 도달해야 하기 때문입니다.마지막"의 예_____"문자열. 동일한 프로세스에서 동시에 생성된 로그 파일입니다. 따라서 각 항목 루프의 끝에서 STDOUT 및 STDERR을 수동으로 플러시하고 절단 시 이 세그먼트를 고려합니다.
답변1
가장 쉬운 방법은 일치하기 전에 입력을 바꾸는 것입니다.
<logfile tac | sed '/pattern/q' | tac
답변2
다음은 몇 가지 옵션입니다.
줄의 순서를 뒤집는 이점을 활용
tac
하고 grep이 다음 줄을 포함하도록 하고(이제 역전되었으므로 이전 줄) 첫 번째 일치 후에 중지한 다음 다시 뒤집어서 순서를 복원할 수 있습니다. 다음과 같이 표시합니다.tac /path/to/file | grep -m 1 -B 1 "mypattern" | tac
마지막 일치 항목과 다음 줄을 제외한 줄을 제거합니다.
grep -A 1 "mypattern" /path/to/file | tail -n 2
당신은 당신의 파일에 그것을 시도하고 어떤 것이 당신의 경우에 더 나은 성능을 발휘하는지 확인해야 합니다.
명령 앞에 표준 출력 리디렉션을 추가하여 로그 파일에 출력을 추가할 수 있습니다 >> /path/to/outputfile
.