숫자에서 선행 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