Назад | Перейти на главную страницу

Есть ли способ преобразовать журнал «Вывод всех сеансов» с управляющими символами в более удобный для чтения журнал «Вывод для печати»?

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

[ESC]] 0; root @ host: ~ [BEL] [root @ host ~] # itm, cm [BS] [BS] [ESC] [K [BS] [ESC] [Kcmd агент starp [BS] t

Есть ли какой-нибудь способ разумно вырезать эти управляющие символы, чтобы конечный результат был удобочитаемым файлом, очень похожим на тот, который вы бы видели в формате «вывода для печати»?

Спасибо за предложение ниже. Наша основная проблема - это управляющие символы [BS], которые могут изменить это:

ls -pg [BS] [BS] al P [BS] | greu [BS] p dr

в:

ls -al | grep dr

Есть идеи, как этого добиться?

Включить очень большую прокрутку в шпатлевке, cat файл журнала, скопируйте и вставьте результат в новый файл.

Этот фильтр sed, хотя и не идеален, даст вам отправную точку.

sed -r 's/(\[[A-Z]+\]?|\]0;)//g' escapes.log > noescapes.log

Если я пропущу ваш образец через этот фильтр, я получу:

root@host:~[root@host ~]# itm,cmcmd agent starpt

Решение, которое полагается на команду / сценарий для анализа фактических кодов терминала, было бы более элегантным, это скорее «быстрое исправление».

Разбор регулярных выражений для тех, кто пытается их изучить:

  • внешняя скобка для целей чередования ( | символ ИЛИ)
  • \[ и \] - это экранированные квадратные скобки, поэтому они не будут интерпретироваться как класс символов.
  • [ ] содержат класс символов. [A-Z] это класс для сопоставления любой заглавной буквы.
  • + указывает на соответствие «одному или нескольким предыдущим атомам». Предыдущий атом был классом символов, так что «одна или несколько заглавных букв».
  • ? указывает, что предыдущий атом необязателен. В этом случае необязательный атом \].
  • Комбинированное значение на данном этапе: «появление одного или нескольких символов верхнего регистра, которым предшествует литерал [, необязательно с суффиксом литерала]»
  • В | символ - начало ИЛИ.
  • \]0; соответствует 'литералу] с суффиксом 0; `.

Строка замены пуста, поэтому они удаляются. /g говорит sed не останавливаться на первом матче.