Удаление escape-символов из экранного журнала GNU Screen.% N


14

Можно ли удалить последовательности ESC в выходном файле экрана GNU? Такие вещи, как цвета, вкладки и другие escape-символы, попадают в файлы журналов и их становится трудно расшифровать.

Я пробовал Dr. Google & Co., а также читал руководство, но не смог найти ничего подходящего ...

Возможно, я что-то упустил?

Ответы:


11

Попробуйте этот кусочек магии Perl:

perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0

Спасибо за это - это УДИВИТЕЛЬНО! Там по-прежнему есть символы ^ G и ^ M, но их гораздо
удобнее читать

1
Добавил это в выражение.
whitequark

Интересно, сколько лиц ASCII находится в этом одном вкладыше. Я перестал считать около 20.
Джон Т

4
Конечно, я могу написать еще одну строку, которая будет считать их.
Уайткварк

10

Используйте ансифильтр.

ansifilter screenlog.txt > screenlog.txt.clean

это что-то в каждой системе Linux или что-то, что должно быть установлено?
подмастерье Компьютерщик

@JourneymanGeek его нет даже в репозиториях Ubuntu, поэтому я бы сказал, что он не совсем популярен. Похоже, вы должны сами получить его со страницы проекта и запустить / скомпилировать самостоятельно. Точно не назову это популярной программой ansifilter.sourceforge.net
Саймон Шихан

Я на OSX и использовал, brew install ansifilterи он работал как шарм.
thekingoftruth

1
Я не знаю, как это изменилось после комментариев о распространении в 2012 году, но я нашел это в репозитории для текущей версии Fedora (22).
Дм

10

Также попробуйте параметр -r или -R меньше.

less -r screenlog.0

Хорошее решение. Он правильно обрабатывает все символы ^ H (удаление), отображает индикаторы выполнения без мазки ^ M и даже сохраняет мою подсказку цвета! Конечно, иногда отображение журнала не достаточно.
Quantum7

5

После того, как вы записали свой сеанс в screenlog.n, вы можете поместить файл в терминал и затем использовать команду hardcopy, чтобы вывести вывод cat в файл. Результат предоставит вам чистый вывод, который не имеет escape-последовательностей.

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

1. $ screen
2. $ cd /path/to/screenlog.n directory/
3. $ wc -l screenlog.n 
4. $ screen -X scrollback 245 # 245 is the number of lines found from your wc command + 5 
5. $ cat screenlog.n
6. $ screen -X hardcopy -h screenlog.n.cleaned 

Обратите внимание, что -h гарантирует, что вы захватите всю историю прокрутки, а не только то, что в непосредственном представлении

Файл screenlog.n.cleaned теперь будет содержать печатную копию вывода cat и не будет содержать никаких escape-последовательностей.


Очень очень аккуратно . Все остальные однострочные perl / sed / python провалились для меня. Очень расстраивает, когда я думаю, что меньше -r / more обрабатывает мой файл напрямую. Одно предложение wc -lне сработало для меня. Он вернул 28226, но на самом деле мне нужно было 33031 в моем случае.
Малат

4

Я использую stringsкоманду, чтобы сделать экранный журнал читабельным. Под Debian это часть пакета binutils.

Как написано на его странице руководства:

strings - найти печатаемые строки в объекте или другом двоичном файле


2

Если вы screenпользователь, то решение для печатной копии экрана, предложенное постом Джоэля Веркса, будет работать лучше всего, при условии, что у вас есть большой прокрутка, определенная в вашем .screenrc:

defscrollback 10000

тогда вы бы сделали:

  1. Показать ваш screenlogфайл:

    $ cat screenlog.<screen_window_num>
    
  2. Используйте hardcopy -h(см. Справочную страницу экрана), чтобы сохранить текущее содержимое окна и его буфер прокрутки в hardcopy.#файл:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.