표준 출력이 아닌 파일에서만 모든 CR 줄을 "티"로 제거하려면 어떻게 해야 합니까?

표준 출력이 아닌 파일에서만 모든 CR 줄을 "티"로 제거하려면 어떻게 해야 합니까?

eg 를 사용할 때 출력에서 ​​현재 진행 상황을 실시간으로 확인하고 나중에 사용할 수 있는 로그를 갖고 rsync싶습니다 . tee파이프만 사용하면 | tee logfile로그 파일에 많은 줄이 포함됩니다.

0 files...<CR>
100 files...<CR>
200 files...<CR>

캐리지 리턴 <CR>문자는 현재 행을 실시간 출력으로 바꾸는 데 사용됩니다. 이는 정확히 이 stdout부분 에서 tee원하는 동작이지만 로그 파일에서 <CR>a와 마지막 항목 사이의 내용을 삭제하도록 할 수 있는 방법이 있습니까 <LF>? (구체적인 답변을 요구하는 것이 아닙니다 rsync. 이것은 단지 예일 뿐입니다!) sed중간에 파이프가 있을 수도 있나요?

답변1

다음을 수행할 수 있습니다.

... | tee /dev/stderr | grep -v $'\r' > logfile

또는:

.... | tee >(grep -v $'\r' > logfile)

이렇게 하면 효과적으로 제거됩니다.진전rsync. bash와 zsh $'...'>(...)ksh 구문을 지원하지만 표준은 아닙니다 sh.

관련 정보