3

Я пытаюсь передать вывод скрипта (Mocha) другому скрипту. Однако есть одна проблема: Mocha генерирует довольно много анси-экранирующих символов для обновления экрана на лету. Эти символы также отправляются через канал.

Есть ли способ обработать последовательность ANSI так, чтобы вывод был таким же, как окончательный вывод на экран? Я хочу сохранить последовательности выхода цвета, но не ускользает движение курсора.

Изменить: У меня есть частичное решение сейчас (только для Mocha): до сих пор кажется, что Mocha с выходом спецификации (тот, который я использую) генерирует только цветные символы ecape и escape-последовательность CSI 0G . Экранирующий символ CSI 0G означает, что курсор должен переместиться обратно к началу строки. Мокко использует это, чтобы полностью перезаписать строку. Поэтому вы можете просто создать регулярное выражение sed, которое будет удалять все строки до этой escape-последовательности: sed 's/^.*\x1b\[0G//g' . Я все еще ищу полное решение, хотя.

1 ответ1

0
sed -e 's/\x1b\[[0-9?]\+[^m0-9?]//g'

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

Редактировать: Вы также должны использовать свой sed 's/^.*\x1b\[0G//g' перед моим, если вы хотите, чтобы предыдущий текст был фактически перезаписан. В противном случае будет выведен как предыдущий, так и новый текст. Если вы хотите , чтобы все из последовательностей , которые будут осуществляться таким образом , что выход такой же , как то , что будет отображаться в эмуляторе терминала, вы должны были бы сделать какой - то фон эмулятор терминала , который может на самом деле выполнить все коды, и в В этот момент такой проект затмил бы ansifilter .

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