답변:
비 대화식으로 사용하는 경우 대부분의 표준 명령 grep
은 출력을 버퍼링합니다. 즉, 데이터를 즉시 쓰지 않습니다 stdout
. 쓰기 전에 많은 양의 데이터를 수집합니다 (OS의 경우 Linux, 종종 4096 바이트).
명령에서 grep
의 출력은 파이프됩니다 stdin
의 sed
때문에, 명령 grep
출력 버퍼.
따라서 라인 버퍼를 사용하는 --line-buffered
옵션 grep
은 기본적으로 4096 바이트에 도달하기를 기다리는 대신 줄 바꿈을 볼 때마다 출력을 쓰는 것을 의미합니다. 그러나이 경우, 당신은 필요하지 않습니다 grep
전혀, 단지 사용 tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
버퍼를 수정하는 옵션이없는 명령으로 GNU coreutils stdbuf를 사용할 수 있습니다
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
라인 버퍼링을 켜거나 -o0
버퍼를 비활성화 하는 데 사용합니다.
노트