Как `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 .

  • Перенаправить вывод в stdout и pipe в двоичный файл
  • У Busybox ASH внутри initrd есть проблема, когда трубопроводный тройник
  • Как использовать команду tee с эхом в соответствии с требованиями ниже?
  • Как перенести часть шаблона соответствия вывода в файл, оставив остальную часть в stdout?
  • tee -a не воссоздает файл
  • Почему эта команда работает для вывода сценария регистрации?
  • Как использовать тройник для перенаправления на grep
  • Перенаправление вывода в зависимости от регулярного выражения grep
  • Печать / тройник для консоли, не передавая выход в трубу
  • Подробный вывод в лог-файле и простой вывод на экран?
  • Как я могу удалить файл защиты, сделанный tee?
  • Linux и Unix - лучшая ОС в мире.