12

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

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

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

6 ответов6

10

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

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

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

less -r screenlog.0
8

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

ansifilter screenlog.txt > screenlog.txt.clean
4

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

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

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

4

После того, как вы записали свой сеанс в 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-последовательностей.

0

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

defscrollback 10000

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

  1. Отобразите файл screenlog :

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

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .