Чтобы отобразить файл, содержащий ANSI-последовательности,
less -r typescript
Или,
less -R typescript
Чтобы удалить последовательности ANSI и обратного пространства из файла, создайте чистый newfile
, try:
sed -r ':again; s/[^\x08]\x08\x1b\[K//; t again; s/\x1b_[^\x1b]*\x1b[\]//g; s/\x1B\[[^m]*m//g' typescript >newfile
-r
Это включает расширенные регулярные выражения. (В системах BSD -r
следует заменить на -E
. Современные версии GNU sed будут принимать либо -r
, либо -E
.) s/\x1b_[^\x1b]*\x1b[\]//g
Как расширение xterm
(см. documentation ), Esc _ something Esc \
ничего не сделает. Эта команда удаляет эти последовательности. s/\x1B\[[^m]*m//g
Это удаляет оставшиеся последовательности ANSI, которые задают цвета и т. Д. Это охватывает все последовательности управления, которые я обычно запускаю , Существует множество расширенных управляющих последовательностей, и если на вашем выходе есть некоторые из них, которые я еще не видел, возможно, потребуется расширить код.
sed
В системе BSD или POSIX отдельные команды должны быть соединены вместе с параметрами -e
вместо точек с запятой. Таким образом, попробуйте:
sed -e ':again' -e 's/[^\x08]\x08\x1b\[K//' -e 't again' -e 's/\x1b_[^\x1b]*\x1b[\]//g' -e 's/\x1B\[[^m]*m//g'
Предлагаемый ответ с использованием «sed -r» зависит от GNU sed, что делает его не очень портативным. Можно выполнять те же функции с POSIX sed, но по-разному: POSIX не предусматривает передачу всего скрипта в командной опции, как показано здесь. Это означает, что способ (POSIX) для реализации цикла будет находиться в отдельном файле, переданном sed с использованием опции «-f». Аналогично, шестнадцатеричные константы не переносимы. После внесения этих изменений функциональный эквивалентный сценарий может быть использован в системах BSD и Unix.
В предлагаемом ответе также не рассматриваются некоторые виды использования возвратов каретки, которые довольно распространены (например, в выходном файле yum ), и не отфильтровывает «большинство» ANSI-последовательностей (поскольку в нем основное внимание уделяется окончательному символу SGR «m»). Наконец, это означает
escape _ text _
как расширение xterm. Но такое расширение не обеспечивается xterm, потому что два символа «escape» и «_» начинают последовательность Application Program Command (и xterm не реализует ни одного).
Полученное sed -script выглядит так: «[^] - символ escape-кода):
s/^[[[][<=>?]\{0,1\}[;0-9]*[@-~]//g
s/^[[]][^^[]*^G//g
s/^[[]][^^[]*^[\\//g
:loop
s/[^^H]^H\(.\)/\1/g
t loop
s/^M^M*$//g
s/^.*^M//g
s/^[[^[]//g
Здесь можно найти более полный скрипт с именем« script2log » здесь . Есть, однако, вещи (такие как CSI K), которые не подходят для сценария sed.