Как `tee` удалять все строки CR только в файле, но не stdout?

При использовании, например, rsync , я хотел бы tee его вывод, чтобы я мог просматривать текущий ход в реальном времени и иметь журнал для более позднего. Использование только трубопроводов | tee logfile | tee logfile журнала будет содержать много строк à la

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

Если возврат каретки <CR> используется для вывода живого выхода, замените текущую строку. Для части stdout tee это точно желаемое поведение, но есть ли способ, чтобы файл журнала ничего не делал между <CR> и последним <LF> ? (Я не прошу rsync конкретный ответ rsync , это просто пример!) Может быть, какой-то sed пипсин между ними?

One Solution collect form web for “Как `tee` удалять все строки CR только в файле, но не stdout?”

Вы можете сделать:

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

Или:

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

Что бы эффективно удалить эту строку прогресса в случае rsync . $'...' и >(...) – это синтаксис ksh, также поддерживаемый bash и zsh, но не стандартный sh .

  • пароль для паролей `sudo` и другие данные для команды sudo`ed
  • Как работает `: w! Sudo tee%`
  • Bash: Объем переменных в цикле for с использованием тройника
  • bash: tee ест новые строки после exec
  • Возможно ли «разблокировать» STDOUT в двух разных местах?
  • Замена процесса тройником и пастой
  • `tee` для команд
  • Как я могу удалить файл защиты, сделанный tee?
  • Как перенести часть шаблона соответствия вывода в файл, оставив остальную часть в stdout?
  • grep ключевое слово из вывода Mplayer и отправить остальное в файл
  • tee stdout to stderr?
  • Linux и Unix - лучшая ОС в мире.