Я могу использовать команду «script» для записи интерактивного сеанса в командной строке. Однако сюда входят все управляющие символы и цветовые коды. Я могу удалить управляющие символы (например, backspace) с помощью «col -b», но я не могу найти простой способ удаления цветовых кодов.
Обратите внимание, что я хочу использовать командную строку обычным способом, поэтому не хочу отключать цвета там - я просто хочу удалить их из вывода скрипта. Кроме того, я знаю, что могу поиграть и попытаться найти регулярное выражение, чтобы исправить ситуацию, но я надеюсь, что есть более простое (и более надежное - что, если есть код, о котором я не знаю, когда разрабатываю регулярное выражение?).
Чтобы показать проблему:
spl62 tmp: скрипт Скрипт запущен, файл машинописный spl62 lepl: ls add-licence.sed build-example.sh commit-test push-docs.sh add-licence.sh build.sh delete-licence.sed setup.py asn build-test.sh delete-licence.sh src build-doc.sh clean doc-src test.ini spl62 lepl: выход Скрипт готов, файл машинописный spl62 tmp: cat -v машинопись Сценарий начался в четверг 09 июня 2011 09:47:27 CLT spl62 lepl: ls ^ M ^ [[0m ^ [[00madd-licence.sed ^ [[0m ^ [[00; 32mbuild-example.sh ^ [[0m ^ [[00mcommit-test ^ [[0m ^ [[00; 32mpush-docs.sh] ^ [[0m ^ M ^ [[00; 32madd-licence.sh ^ [[0m ^ [[00; 32mbuild.sh ^ [[0m ^ [[00mdelete-licence.sed ^ [[0m ^ [[00msetup.py ^ [[0m ^ M] ^ [[01; 34masn ^ [[0m ^ [[00; 32mbuild-test.sh ^ [[0m ^ [[00; 32mdelete-licence.sh ^] [[0m ^ [[01; 34msrc ^ [[0m ^ M ^ [[00; 32mbuild-doc.sh ^ [[0m ^ [[00; 32mclean ^ [[0m ^ [[01; 34mdoc-src ^ [[0m ^ [[00mtest.ini ^ [[0m ^ M] spl62 lepl: выход ^ M Сценарий сделан в четверг 09 июня 2011 09:47:29 CLT spl62 tmp: col -b <машинопись Сценарий начался в четверг 09 июня 2011 09:47:27 CLT spl62 lepl: ls 0m00madd-licence.sed0m 00; 32mbuild-example.sh0m 00mcommit-test0m 00; 32mpush-docs.sh0m 00; 32madd-licence.sh0m 00; 32mbuild.sh0m 00mdelete-licence.sed0m 00msetup.py0m 01; 34masn0m 00; 32mbuild-test.sh0m 00; 32mdelete-licence.sh0m 01; 34msrc0m 00; 32mbuild-doc.sh0m 00; 32mclean0m 01; 34mdoc-src0m 00mtest.ini0m spl62 lepl: выход Сценарий сделан в четверг 09 июня 2011 09:47:29 CLT
Обновление ответа Жиля, чтобы также убрать возврат каретки и удалить назад символы, которые были важны для меня для машинописи, сгенерированной в Cygwin:
источник
Я бы использовал
sed
в этом случае.делать:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed -e "s / search / replace / g" является стандартным материалом. регулярное выражение объясняется как показано ниже:
\x1b
совпадение с Escape, предшествующим цветному коду;\[
совпадение первой открытой скобки;.\{1,5\}
совпадение от 1 до 5 любого отдельного символа. Придется\
использовать фигурные скобки, чтобы оболочка не повредила их.m
последний символ в регулярном выражении - обычно трейлинг цветовой код.//
пустая строка для того, чтобы заменить все.g
сопоставьте его несколько раз в строке.источник
foo\e[1m(1m = {
становитсяfoo = {
вместоfoo(m = {
), замена.
на[0-9;]
более точным..\{1,5\}
с[^m]\{1,5\}
для этого - но обратите внимание , что даже тогда еще только удаляет «графические выдач» коды (те , которые заканчиваются вm
) - в основном цвет, реверс, полужирный и курсивный стили (где это применимо).\x1b(B
(включено в вывод цвета ржавчины)\x1b
и нет\033
?\u001b
вместо\x1b
источник
=> Как использовать:
протестировано на: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora - SunOS
источник
Я решил проблему, запустив
scriptreplay
экран и выгрузив буфер прокрутки в файл.Следующий ожидаемый скрипт сделает это за вас.
Он был протестирован для лог файлов с 250 000 строк. В рабочем каталоге вам нужен ваш скрипт-файл, файл с именем time, в котором 10.000.000 раз строка «1 10», и скрипт. Мне нужно имя вашего файла сценария в качестве аргумента командной строки, например
./name_of_script name_of_scriptlog
.Файл времени может быть сгенерирован
источник
delay
blocksize
", поэтому нет причин не просто сделать это "0
<entirefile>
" и выгрузить все без задержки. Вы можете сделать это, взяв размер скрипта минус первую строку (tail -n +2 typescript|wc -c
) и создав файл синхронизации с помощьюecho "0 "`tail -n +2 typescript|wc -c` > timing
. Это будет в основном мгновенно иscriptreplay
воспроизведет весь сценарий с максимально возможной скоростью.Нашел этот вопрос, пока искал решение той же проблемы. Еще немного покопаться и найти этот скрипт в Live Journal по этой ссылке. Я работал отлично для меня. Это также очень хорошая статья об этой проблеме и о том, как работает ее решение. Определенно стоит прочитать. http://jdimpson.livejournal.com/7040.html
источник
Я бы предпочел использовать специализированные инструменты для преобразования вывода скрипта в простой текст, который постоянно поддерживается и хорошо проверяется, по сравнению с пользовательским регулярным выражением. Так что это сделало работу для меня:
команда script записывает в файл машинописи ansi2txt - преобразует код ANSI с экранированием, таким как цветовые коды, символы возврата и т. д., в обычный текст, однако я обнаружил, что пара экранировок все еще остается. col-bp - удалил их полностью.
Я проверил это на последней дискотеке Ubuntu, и это работает.
источник
В пакете есть
ansi2txt
командаcolorized-logs
на Ubuntu. Он удаляет цветовые коды ANSI, но не имеет ничего общего с такими индикаторами, как индикаторы выполнения, которые генерируются с помощью emit^H
или^M
символы для замены текста на месте.col -b
может иметь дело с тем , поэтому для достижения наилучших результатов вы можете объединить дваисточник
Я обнаружил, что просто использовать
cat
было все, что мне нужно, чтобы просмотреть выводscript
в терминале. Это не помогает , когда перенаправив вывод в другой файл, но делает результат чтения, в отличие отcat -v
,col -b
или в текстовом редакторе.Чтобы устранить цвета или сохранить результаты в файл, вручную скопируйте и вставьте выходные данные
cat
в текстовый редактор или в другуюcat
команду, например:источник
script
пробег включал вывод с прикрепленными цветовыми кодами, как в случае ОП?cat
представлены оригинальные цвета, которые могут быть удалены путем ручного копирования и вставки. Используется OPcat -v
иcol -b
, оба из которых представляют коды, а не правильно отформатированный конечный результат. Я отредактировал свой ответ.В продолжение последнего ответа, который использует tr и: cntrl: мы могли бы сделать
sed "/^[[:cntrl:]]/d" output.txt
Мне кажется, это работает, потому что все строки, сгенерированные vi, начинаются с управляющего символа. Бывает и лишить пустых строк и строк, начинающихся с вкладки, хотя это работает для того, что я делаю. Возможно, есть способ сопоставить любой управляющий символ, кроме \ n \ m \ t.
Возможно, мы можем найти определенный управляющий символ, и похоже, что все ненужные строки, сгенерированные vi, начинаются с того, что выглядит как ^ [. hexdump говорит мне, что первый символ 1b, так что, кажется, это тоже работает
sed "/^\x1b/d" output.txt
Это похоже на ответ, опубликованный выше, но не работает должным образом, потому что после выполнения команды некоторые ненужные символы уже добавляются в командную строку, как если бы пользователь их набрал.
источник
ls --color
(как показано в вопросе) ваше решение удалит почти каждую строку, содержащую информацию. Фигово. Но спасибо, что отказались от бесполезного использованияcat
. :-) tr
- переводить или удалять символыисточник
01;34m
например, и удалит конец строкиnewline (\n)
.