로그 파일에서 특정 줄을 선택하여 텍스트 파일에 저장해야 합니다. 다음 방법을 시도했지만 그 중 어느 것도 예상대로 작동하지 않습니다. "todel.txt" 파일은 0바이트를 표시합니다.
tail -f general.log | grep Some_word > >(tee -a todel.txt)
tail -f general.log | grep Some_word ; tee todel.txt
tail -f general.log | grep Some_word | tee -a todel.txt
답변1
stdbuf(1)
파이프라인에 다음 을 추가해야 합니다 .
tail -f general.log | stdbuf -oL grep Some_word | tee -a todel.txt
이는 grep
stdout 스트림 버퍼링 모드를 라인 버퍼링으로 설정합니다. 그렇지 않으면 grep
스트림에서 최소 4096바이트를 가져올 때까지 기다립니다(이는 Linux에서 버퍼링된 I/O의 기본값입니다).
또는 다음으로 grep
전화 할 수 있습니다 --line-buffered
.
tail -f general.log | grep --line-buffered Some_word | tee -a todel.txt
바라보다파이프라인에서 버퍼링 끄기그리고http://www.pixelbeat.org/programming/stdio_buffering/자세한 설명을 위해.
답변2
세 번째는 현재 디렉터리에 파일을 쓸 수 있는 권한이 있다고 가정하면 제대로 작동합니다.
예를 들어:tail -f general.log | grep "Some_word" | tee todel.txt
이것은 올바르게 정의된 tee 구문입니다. 작동하지 않는다면 다른 일을 잘못하고 있는 것입니다.
또한 검색 문자열을 따옴표로 묶는 것이 좋습니다. 현재 작업 디렉토리에 검색 문자열과 일치하는 파일 이름이 있으면 검색 문자열 대신 파일 매개변수로 처리될 수 있습니다.
답변3
grep "my words" > mytextfile.txt
tail -f access.log > last_log.txt
tail -f access.log | grep "IP address" > hacker.log
답변4
당신이 찾고 있는 전화번호가 다음 주소로 전송될 수 있습니다.표준 출력 대신 표준 오류, 이 경우 줄을 다음으로 끝내면 2>&1
트릭을 수행해야 합니다.
tail -f general.log | grep Some_word | tee -a todel.txt 2>&1