Есть ли какой-нибудь способ преобразовать журнал "Все выходные данные сеанса" с управляющими символами в более удобный для чтения журнал "Выходные данные для печати"?
У нас был собственный подрядчик, который помог с какой-то конфигурацией продукта, и мы пытаемся просмотреть журналы замазок, которые он для нас установил, но вместо "вывода на печать" он использовал "вывод всей сессии", который включает в себя все нажатие клавиш, включая "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
не останавливаться на первом матче.