«Визуализировать» текстовый файл с возвратом каретки (^ M) и сохранять вывод в файл

У меня есть программа CLI Python, которая работает в течение длительного времени и имеет своего рода прогрессбар, который в основном печатает текст в цикле без «\ n» в конце, на следующей итерации он печатает «\ r», чтобы стереть строку , снова печатает текст и так далее:

while some_condition: print "\rprocessed {} out of {}".format(done_counter, all_counter), 

Он отлично работает в консоли, но когда я перенаправляю stdout в файл, неудивительно, что я получаю много «обработанных … … ^ M». Я хочу получить чистое, «визуализированное» представление файла, как это было бы видно на консоли, при этом все «^ M» обработано. Я не хочу просто удалять эти контрольные символы, а применять их к тексту.

В качестве обходного пути в настоящее время я делаю это: tail -n<NUM_LINES> screenlog_file с <NUM_FILES> достаточно большим, затем выберите «визуализированный» текст с помощью мыши, скопируйте муравьиную пасту в новый файл. Интересно, есть ли более удобный способ сделать это.

РЕДАКТИРОВАТЬ

Благодаря @Archemar, нашел это . Он решает мою текущую проблему, так как я могу изменить код. Однако любые идеи / обходные пути, использующие только linux utils, высоко ценятся.

One Solution collect form web for “«Визуализировать» текстовый файл с возвратом каретки (^ M) и сохранять вывод в файл”

Для такого приложения я запускаю программу, используя script (чтобы не изменять его поведение при перенаправлении вывода в файл), а затем фильтровать полученный файл с помощью скрипта sed. См. Например, мой ответ в Могу ли я программно «записать в» управляющие коды ANSI в файл с помощью unix utils? , обсуждая script2log .

Существуют и другие примеры, например, упомянутые в комментариях. Однако упомянутые выше не затрагивают этот конкретный случай (когда возврат каретки используется для перечеркивания текста), но только удаляет управляющие символы.

  • Представление / цитирование NUL в командной строке
  • Управляющие символы в терминале с активным процессом переднего плана
  • Удалить управляющие символы из /var/log/boot.log
  • Как пропустить специальные / сокетные файлы во время передачи rsync?
  • Как переименовать имя файла с помощью 'или? в имени файла?
  • Я случайно вышел из vim с: x! ~, И теперь моя ~ появляется по другому пути
  • Странное кодирование в Slackware
  • Очень странная проблема с текстовым файлом ls> при просмотре с помощью emacs
  • Mac-стиль / специальные клавиши Alt для Linux
  • Почему «echo abc ^ H» просто не печатает `ab`?
  • Как избежать специальных символов в длинной строке sed
  • Linux и Unix - лучшая ОС в мире.