
문자열을 찾을 때까지 tail을 사용하여 로그 파일의 출력을 다른 파일에 써야 합니다.
로그 파일에는 다음이 포함됩니다.
I am Rahul.
I have 5 oranges.
The end.
Something something.
"마침내"까지는 모든 것을 다른 파일에 쓰고 싶습니다.
tail -f var/log/output.log
| grep -m 1 "The end" | tee
Abc.txt
그러나 abc.txt 파일에는 "End"만 기록됩니다.
답변1
tail -f file | sed '/The end/q' | tee outfile
Sed는 "The end"가 표시될 때까지 모든 줄을 인쇄하고 그 지점에서 종료됩니다.
또한 최근에는AskUbuntu에서 물어보세요.
답변2
grep
grep
스트림이나 파일에서 일부 패턴과 일치하는 행을 추출하기 때문에 여기서는 사용할 수 없습니다 .멈추다특정 문자열이 발견되면 출력됩니다. 기본적으로 해당 행 이전의 모든 행과 일치 하고 해당 행 이후의 행과 일치하지 않는 grep
일부 패턴을 제공해야 합니다 .The end.
sed '/The end\./q'
The end.
이 명령은 문자열이 포함된 행을 볼 때까지 표준 입력 스트림의 각 행을 출력합니다. 이때 마지막 라인이 출력되며, 스크립트 에 있는 명령어를 sed
실행하여 명령어가 종료됩니다 .q
sed
파이프라인의 일부로:
tail -f var/log/output.log |
sed '/The end\./q' |
tee Abc.txt
명령의 구현에 따라 tail
파이프는 라인을 만나자마자 종료되거나 존재하지 않는 프로세스에 쓰려고 시도하는 The end.
즉시 종료됩니다. 즉, 라인이 보이고 라인 이 종료되 자마자 출력 .tail -f
sed
The end.
sed
Something something.
tail -f
tail
OpenBSD(POSIX처럼 동작하지 않음 tail
)에서는 마지막으로 설명된 동작이 제공되는 반면 GNU는 tail
첫 번째 동작( The end.
라인을 만나자마자 종료)을 제공합니다.