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

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

[ESC]] 0; root @ host: ~ [BEL] [root @ host ~] # itm, см [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

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

2 ответа

Решение

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

Хотя этот фильтр и не идеален, он послужит вам отправной точкой.

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

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

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

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

Regex разбивка для тех, кто пытается их выучить:

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

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

Другие вопросы по тегам