Я использую Связку ключей для управления ssh ключи. Это также доступно в Debian и поэтому по-видимому, Ubuntu с
apt-get install keychain
Вот страница пакета связки ключей Debian. Как Вы видите, проект не очень активен, но работает на меня. Я также прокомментировал немного об этом в другом ответе здесь
Следующий сценарий должен отфильтровать все ANSI/VT100/xterm управляющие последовательности для (на основе ctlseqs). Минимально протестированный, сообщите о любом под - или примите меры.
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ \e[ #%()*+\-.\/]. |
\e\[ [ -?]* [@-~] | # CSI ... Cmd
\e\] .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
\e[P^_] .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e. //xg;
print;
}
Известные проблемы:
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ \e[ #%()*+\-.\/]. |
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
print;
}
Я использовал бы sed
в этом случае.
сделайте:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed-e "s/search/replace/g" является стандартным материалом. regex объяснен как указано ниже:
\x1b
соответствуйте Escape, предшествующему цветовому коду \[
соответствует первой открытой скобке .\{1,5\}
соответствия 1 - 5 из любого отдельного символа. Имейте к \
фигурные скобки, чтобы помешать оболочке искажать их. m
последний знак в regex - обычно запаздывает цветовой код. //
пустая строка для того, что заменить все. g
соответствуйте ему многократно на строку.
foo\e[1m(1m = {
становится foo = {
вместо foo(m = {
), замена .
[0-9;]
более точно.
– Lekensteyn
30.12.2013, 17:14
.\{1,5\}
с [^m]\{1,5\}
для этого - но также и примечание, что это даже затем все еще только удаляет "графическое представление" коды (те, которые заканчиваются в m
) - в основном цвет, обратный, полужирный и стили курсива (где применимый).
– Hannu
23.08.2015, 17:26
\x1b(B
(включенный в подвергает вывод цвета коррозии),
– ideasman42
11.11.2016, 15:11
Обновление ответа Жабр, чтобы также удалить возвраты каретки и сделать стирание клавиши Backspace предыдущих символов, которые были оба важны для меня для машинописного текста, сгенерированного на Cygwin:
#!/usr/bin/perl
while (<>) {
s/ \e[ #%()*+\-.\/]. |
\r | # Remove extra carriage returns also
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
1 while s/[^\b][\b]//g; # remove all non-backspace followed by backspace
print;
}
cat typescript | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > typescript-processed
# The "sed -r" trick does not work on every Linux, I still dunno why:
DECOLORIZE='eval sed "s,${END}\[[0-9;]*[m|K],,g"'
=> как использовать:
<commands that type colored output> | ${DECOLORIZE}
проверено на: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora. - SunOS
Я решил проблему с помощью Scriptreplay
на экране и сброс буфера прокрутки в файл.
Следующее ожидаемое сценарий делает это для вас.
Было протестировано на логики до 250 000 строк. В рабочем каталоге вам нужен ваш ScriptLog, файл под названием «Время» с 10.000.000 раз в строке «1 10» в нем и скрипте. Мне нужна имя вашего сценария в качестве аргумента командной строки, как ./ Имя_of_script name_of_scriptlog
.
#!/usr/bin/expect -f
set logfile [lindex $argv 0]
if {$logfile == ""} {puts "Usage: ./script_to_readable.exp \$logfile."; exit}
set timestamp [clock format [clock sec] -format %Y-%m-%d,%H:%M:%S]
set pwd [exec pwd]
if {! [file exists ${pwd}/time]} {puts "ERROR: time file not found.\nYou need a file named time with 10.000.000 times the line \"1 10\" in the working directory for this script to work. Please provide it."; exit}
set wc [exec cat ${pwd}/$logfile | wc -l]
set height [ expr "$wc" + "100" ]
system cp $logfile ${logfile}.tmp
system echo $timestamp >> ${logfile}.tmp
set timeout -1
spawn screen -h $height -S $timestamp
send "scriptreplay -t time -s ${logfile}.tmp 100000 2>/dev/null\r"
expect ${timestamp}
send "\x01:hardcopy -h readablelog.${timestamp}\r"
send "exit\r"
system sed '/^$/d' readablelog.$timestamp >> readablelog2.$timestamp
system head -n-2 readablelog2.$timestamp >> ${logfile}.readable.$timestamp
system rm -f readablelog.$timestamp readablelog2.$timestamp ${logfile}.tmp
Временный файл может быть сгенерирован
for i in $(seq 1 10000000); do echo "1 10" >> time; done
tr
- переводить или удалять символы
cat typescript | tr -d [[:cntrl:]]
Продолжая последний ответ, который использует tr и :cntrl :, можем ли мы сделать
sed "/^[[:cntrl:]]/d" output.txt
Мне кажется, это работает, потому что все строки, сгенерированные vi, начинаются с управляющего символа. Бывает также удаление пустых строк и строк, начинающихся с табуляции, хотя это работает для того, что я делаю. Возможно, есть способ сопоставить любой управляющий символ, кроме \n \m \t.
Может быть, мы можем найти конкретный управляющий символ, и похоже, что все ненужные строки, сгенерированные vi, начинаются с чего-то похожего на ^[. hexdump говорит мне, что первый символ — 1b, так что это тоже работает
sed "/^\x1b/d" output.txt
Это похоже на ответ, размещенный выше, но он не работает должным образом, потому что после выполнения команды некоторые ненужные символы уже добавляются в командную строку, как если бы пользователь ввел их.
Я обнаружил, что для просмотра вывода script
в терминале достаточно просто использовать cat
. Это не помогает при перенаправлении вывода в другой файл, но делает результат читабельным, в отличие от cat -v
, col -b
или текстового редактора.
Чтобы удалить цвета или сохранить результаты в файл, вручную скопируйте и вставьте вывод из cat
в текстовый редактор или в другую команду cat
, например:
cat > endResult << END
<paste_copied_text_here>
END
Я бы предпочел использовать специализированные инструменты для преобразования вывода скрипта в обычный текст, который постоянно поддерживается и хорошо тестируется, а не пользовательское регулярное выражение. Так что это помогло мне:
$ cat typescript | ansi2txt | col -bp > typescript.txt.bp
$ cat -v typescript.txt.bp
команда скрипта записывается в машинописный файл ansi2txt -преобразует код ansi с escape-кодами, такими как цветовые коды, пробелы и т. д., в обычный текст, однако я обнаружил, что пара экранирующих символов все еще остается. col -bp -полностью удалил их.
Я проверил это на последней дискотеке Ubuntu, и это работает.
Я использую
env TERM=dumb SHELL=/bin/bash script
оставляет вам машинописный файл с кучей ^M
, но я просто удаляю эти
сvi
:1,$s/^M//g
не забывая сбежать из ^M
с помощью^V
или просто используйте
dos2unix typescript
Хотя приведенные до сих пор решения хорошо работают для удаления управляющих последовательностей, они также удаляют коды форматирования. В результате таблицы в выводе сжимаются вместе. Мое требование состояло в том, чтобы иметь возможность просматривать и искать в файлах журнала сеансов, собранных с терминала. Решение, которое лучше всего работает для меня, заключалось в использовании меньшего количества -r.
less -r session.log
В Ubuntu есть командаansi2txt
в пакете colorized-logs
. Он хорошо удаляет цветовые коды ANSI, но не имеет дело с такими вещами, как индикаторы выполнения, создаваемые путем испускания символов ^H
или ^M
для перезаписи текста на месте. col -b
может работать с теми , поэтому для достижения наилучших результатов вы можете комбинировать два
cat typescript | ansi2txt | col -b