채팅 로그 파일을 일부 음성 출력으로 파이프하려고 하는데 타임스탬프 제거 cut
및 특수 문자 제거를 사용하고 싶습니다 tr
. 불행히도 이것은 cut
다음과 함께 사용하면 중지되는 것 같습니다.tail -f
tr
//works
$ tail /path/to/chatlogs | cut -b18-
test
test
//works, too
$ tail /path/to/chatlogs | tr -C -d '[:alnum:][:cntrl:] '
test
test
// does not work
$ tail -f /path/to/chatlogs | tr -C -d '[:alnum:][:cntrl:] ' | cut -b18-
//no output
왜? 이 문제를 어떻게 해결할 수 있나요?
파이프가 두 번 들어올 때에도 중단됩니다 cut
.
$ tail -f file | cut -b5- | cut -b5-
//no output
답변1
사용 중인 구문은 의 새 입력만 처리합니다 /path/to/chatlogs
. 명령을 실행하고 새 항목을 기록해 /path/to/chatlogs
보고 결과가 무엇인지 확인하거나 다음을 시도해 보십시오.
tail -1000f /path/to/chatlogs | tr -C -d '[:alnum:][:cntrl:] ' | cut -b18-
또한 마지막 1000개 행도 처리합니다.
"매달려 있는" 부분은 실제로 tail
파이프를 통해 추가 입력이 전달되기를 기다리는 프로세스입니다.
tr
명령에서 버퍼링을 비활성화 하려면 다음을 사용하십시오.
tail -f /path/to/chatlogs | stdbuf -i0 -oL tr -C -d '[:alnum:][:cntrl:] ' | cut -b18-
위의 내용은 다음에서 사용됩니다.파이프라인에서 버퍼링 끄기
답변2
여러 파이프를 사용할 때 stdio 버퍼링에 문제가 있습니다.
문제에 대한 자세한 설명은 다음 위치에 있습니다.http://www.pixelbeat.org/programming/stdio_buffering/그리고 해결책이 없는 것 같습니다.