Применение символов Escape в перенаправленном выходе

Я запускаю программу, которая печатает много символов escape (например, «Esc [1A», чтобы переместить курсор вверх на одну строку) и пытается перенаправить вывод в файл журнала. Когда я запускаю программу без перенаправления, окончательный вывод выглядит примерно так:

256 lines processed. 

Но когда я перенаправляюсь к файлу журнала, это то, что файл выглядит так:

 Processing line 1... Esc[1AProcessing line 2... Esc[1AProcessing line 3... ... Esc[1AProcessing line 256... Esc[1A256 lines processed. 

Что происходит в терминале, символ «Esc [1A» говорит курсору для резервного копирования, так что каждая последующая строка перезаписывает последнюю строку, а в конце отображается только последняя строка.

Я хочу, чтобы файл журнала отображался точно так же, как конечный вывод программы появлялся без перенаправления. Я знаю, что можно col -bp вывод в col -bp , чтобы отфильтровать escape-символы, но я бы хотел применить их, чтобы мои файлы журналов не содержали тысячи посторонних строк. Как я могу это достичь?

One Solution collect form web for “Применение символов Escape в перенаправленном выходе”

Вам нужно очистить эти экраны, когда вы их читаете, – делайте то, что делает терминал, и перезаписывайте их.

Это эмулирует вывод, который вы описываете w / seq :

 seq -s " $(printf '\033[A')" 10 

Если он выписывает терминал, который интерпретирует этот выход, он будет печатать только 10 . Но, как вы заметили в вопросе, это действительно печатает все эти числа друг над другом. Однако, если я фильтрую его вывод с sed как:

 seq -s " $(printf '\033[A')" 10 | sed -e :n -e "\$!N;s/.*$(printf '\033\[A')//;tn" 

… он действительно печатает только 10 потому что sed постоянно читает в каждой следующей строке ввода и s/// убирает все, начиная от головы пространства шаблонов и заканчивая последней победой ключа . И каждый раз, когда он делает это успешно, он снова возвращается к метке :n .

  • Почему sudo не перенаправляет stdout в файл / etc / file, но sudo 'nano' или 'cp' могут?
  • Вывод команды захвата в течение n секунд, затем отсоедините ее (запустите в фоновом режиме)
  • Как перенаправить вывод sqlite3 в файл
  • Как я могу получить SQL-запросы для отображения в выходном файле?
  • Ошибка перенаправления Sub Shell с переменной (while ...) $ 3> $ testdir / $ testfile.log
  • Обертка скрипта оболочки с тройником
  • Захват данных с Fluke 1620a с помощью дескриптора файла Bash / dev / tcp
  • Как я могу назначить вывод команды переменной оболочки?
  • Перенаправить вывод всех команд в файл, а не только последний
  • Восстановление файла, который перезаписывается cat>
  • поиск нескольких условий, а затем перенаправление вывода
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.