Como 'tee' derrubar todas as linhas CR apenas no arquivo, mas não stdout?

2

Ao usar, e. rsync , gostaria de tee de sua saída, de modo que eu possa visualizar o progresso atual ao vivo e ter um log para mais tarde. Usando apenas o encadeamento | tee logfile , o arquivo de registro conterá muitas linhas à la

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

Onde o retorno de transporte <CR> é usado para que a saída ao vivo substitua a linha atual. Para a parte stdout de tee , este é exatamente o comportamento desejado, mas existe alguma maneira de fazer o arquivo de log soltar qualquer coisa entre <CR> e o último <LF> ? (Eu não estou pedindo uma resposta rsync específica, isso é apenas o exemplo!) Talvez alguns sed -pipar entre?

    
por Tobias Kienzler 23.01.2013 / 11:11

1 resposta

2

Você poderia fazer:

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

Ou:

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

O que efetivamente removeria a linha progresso no caso de rsync . $'...' e >(...) são a sintaxe do ksh também suportada pelo bash e zsh, mas não pelo padrão sh .

    
por 23.01.2013 / 11:20