Очистить возврат каретки из текстового файла так, чтобы он выглядел так, как будто он напечатан на консоли

326
Jaakko

Как преобразовать возврат каретки из текстового файла в способ отображения в консоли?

Например, если программа выводит на консоль следующие строки:

start\n progress 01%\r progress 22%\r progress 54%\r progress 100%\n completed 

через некоторое время вывод в консоли будет выглядеть так:

start progress 100%\n completed 

но если я перенаправлю вывод в файл, он будет содержать все промежуточные отчеты о ходе работы.

Предпочтительно какое-то решение, которое можно применить к большим файлам журнала> 100 МБ.

0
Существует программа под названием «sed», которая выполняет поиск и замену (среди прочего), но не находит новые символы строки, потому что работает строка за строкой. Тем не менее, существует язык программирования perl, который также может выступать в качестве программы командной строки, и он может выполнять поиск и замену, так что вы можете заставить его удалять символы \ r. Некоторые ссылки на Perl One упоминаются в принятом ответе здесь https://superuser.com/questions/416419/perl-for-matching-with-regular-expressions-in-terminal barlop 7 лет назад 0
Я почти уверен, что простое удаление не сработает, потому что оно оставит промежуточные строки `progress 22%`, которые в противном случае были бы перезаписаны из-за `\ r` без` \ n`. Приведенный ниже `col` ответ уже решил мою проблему, но я еще не смог (2-дневный тайм-аут) отметить его как ответ. Jaakko 7 лет назад 0
Слова в вашем вопросе могут быть лучше, потому что в вашем примере показаны некоторые строки текста / строк, которые были удалены, в ваших словах ничего не говорится об удалении каких-либо строк. barlop 7 лет назад 0
Если бы ваша тема была «Удалить строки с возвратами каретки из файла», это было бы хорошим описанием вашей цели? barlop 7 лет назад 0
Это другое дело, потому что если первая печать - «1234 \ r», а затем «321 \ n», то конечный результат в консоли будет «3214 \ n». Если вы удалите строки с возвратом каретки, результатом будет `321 \ n`. Jaakko 7 лет назад 0
Какая функция заставит `1234 \ r321 \ n` стать` 3214 \ n`? Если бы это было так, то это означало бы, что 123 поменялись местами. Или 123 в начале были удалены, а 4 переместились в конец 321. Но кто сказал что-нибудь о реверсировании чего-либо или перемещении чего-либо? barlop 7 лет назад 0
Например, в Ubuntu Bash `$ printf" 1234 \ r321 \ n "` возвращает `3214 \ n` в консоли. Ну, по крайней мере, это выглядит так, что на консоли, конечно, на самом деле данные были 1234 \ r321 \ n. И это как раз тот вопрос, мне не интересно, что представляют собой реальные данные, но как они выглядят на консоли, я хочу сохранить их без лишних затрат. Jaakko 7 лет назад 0

1 ответ на вопрос

1
Jaakko

Инструмент под названием col, кажется, делает свое дело

col -bp <filename.log > fileout.log

Похожие вопросы