如何“tee”仅在文件中删除所有 CR 行而不是在标准输出中?

如何“tee”仅在文件中删除所有 CR 行而不是在标准输出中?

使用 eg 时rsync,我希望tee它的输出能够实时查看当前进度,并有日志供以后使用。仅使用管道,| tee logfile日志文件将包含许多行

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

其中回车<CR>符用于让实时输出替换当前行。对于这stdout部分来说tee,这正是所需的行为,但是有什么方法可以让日志文件删除 a<CR>和最后一个之间的任何内容<LF>吗? (我并不是要求rsync具体的答案,这只是一个例子!)也许sed中间有一些管道?

答案1

你可以这样做:

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

或者:

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

这将有效地消除进步线的情况下rsync。 bash 和 zsh$'...'>(...)支持 ksh 语法,但不是标准的sh

相关内容