sed 출력을 리디렉션할 수 없습니다.

sed 출력을 리디렉션할 수 없습니다.

숫자에서 선행 0을 제거하기 위해 sed를 통해 시계 출력을 파이프했습니다. 다음과 같습니다.

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g'

이것은 잘 작동하고 내가 원하는 출력을 생성합니다.

그러나 출력을 파일로 리디렉션하려고 하면 파일에 아무 것도 기록되지 않습니다. 다음은 작동하지 않습니다.

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g' > testfile

테스트 파일에는 아무것도 기록되지 않습니다. 내가 뭘 잘못했나요?

답변1

출력 버퍼링 문제가 있습니다. sed터미널은 일반적으로 출력에 쓰지 않을 때 출력을 버퍼링하므로 버퍼가 가득 찰 때까지(아마 4K 바이트마다) 파일에 아무 것도 기록되지 않습니다.

-u출력 버퍼링을 해제 하려면 옵션을 사용하십시오 sed.

clock -sf 'S%A, %B %d. %I:%M %P' | sed -u 's/\b0\+\([0-9]\+\)/\1/g' > testfile

답변2

스트리밍 출력 소스에서 리디렉션하려고 할 때도 동일한 문제가 발생했습니다.

sed와 함께 (버퍼링되지 않은) 플래그를 사용한 다음 연산자를 사용하여 데이터를 추가하는 -u대신 ( 파일 잠금 및 차단) 데이터를 파이프 해야 합니다 .>>>>

대신 다음을 수행하십시오.

someprogram | sed '/filter/' | tee myfile.txt

관련 정보