Je peux utiliser la commande "script" pour enregistrer une session interactive sur la ligne de commande. Cependant, cela inclut tous les caractères de contrôle et les codes de couleur. Je peux supprimer les caractères de contrôle (comme le retour arrière) avec "col -b", mais je ne trouve pas un moyen simple de supprimer les codes de couleur.
Notez que je souhaite utiliser la ligne de commande de manière normale. Par conséquent, ne souhaitez pas désactiver les couleurs. Je souhaite simplement les supprimer de la sortie du script. Je sais aussi que je peux jouer et essayer de trouver une expression rationnelle pour résoudre le problème, mais j'espère qu'il existe une solution plus simple (et plus fiable - et s'il y avait un code que je ne connaissais pas lorsque je développais l'expression rationnelle?).
Pour montrer le problème:
spl62 tmp: script Le script a démarré, le fichier est dactylographié 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 nettoie doc-src test.ini spl62 lepl: sortie Script terminé, le fichier est dactylographié spl62 tmp: type de script cat -v Le script a commencé le jeu. 09 juin 2011 09:47:27 CLT spl62 lepl: ls ^ M ^ [[0m ^ [[00madd-licence.sed ^ [[0m ^ [[00; 32mbuild-example.sh. ^ [[0m ^ M ^ [[00; 32madd-licence.sh ^ [[0m ^ [[00; 32mbuild.sh ^ [[0m ^ [[00mdelete-licence.sed ^ [[0m ^ [[00msetup.py ^ [[0m ^ M ^ [[01; 34masn ^ [[0m ^ [[00; 32; test dembuild.sh ^ [[0m ^ [[00; 32mdelete-licence.sh. 32mdelete-licence.sh. ^ [[00; 32mbuild-doc.sh ^ [[0m ^ [[00; 32mclean ^ [[0m ^ [[01; 34mdoc-src ^ [^ 0m ^ [[00mtest.ini ^ [[0m ^ M spl62 lepl: sortie ^ M Script réalisé le jeu. 09 juin 2011 09:47:29 CLT spl62 tmp: col -b <typescript Le script a commencé le jeu. 09 juin 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: sortie Script réalisé le jeu. 09 juin 2011 09:47:29 CLT
la source
Mettre à jour la réponse de Gilles pour supprimer également les retours à la ligne et effacer les caractères précédents, ce qui était important pour une police manuscrite générée sur Cygwin:
la source
Je voudrais utiliser
sed
dans ce cas.faire:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed -e "s / search / replace / g" est standard. la regex est expliquée ci-dessous:
\x1b
correspond à la sortie d'échappement précédant le code de couleur\[
correspond à la première tranche ouverte.\{1,5\}
correspond à 1 à 5 de n'importe quel caractère. Ayez\
les accolades pour empêcher la coquille de les briser.m
dernier caractère de regex - traîne généralement le code de couleur.//
chaîne vide pour quoi remplacer tout par.g
associez-le plusieurs fois par ligne.la source
foo\e[1m(1m = {
devientfoo = {
au lieu defoo(m = {
), le remplacement.
par[0-9;]
est plus précis..\{1,5\}
par[^m]\{1,5\}
, mais notez que cela supprime encore les codes de "rendu graphique" (ceux qui se terminent par unm
) - essentiellement les styles couleur, inverse, gras et italique (le cas échéant).\x1b(B
(inclus dans la sortie couleur des rouilles)\x1b
et non\033
?\u001b
au lieu de\x1b
la source
=> comment utiliser:
testé sur: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora - SunOS
la source
J'ai résolu le problème en exécutant
scriptreplay
dans un écran et en vidant la mémoire tampon de défilement dans un fichier.Le script attendu suivant le fait pour vous.
Il a été testé pour les fichiers journaux contenant jusqu'à 250 000 lignes. Dans le répertoire de travail, vous avez besoin de votre journal de script, un fichier appelé "time" contenant 10 000 000 de fois la ligne "1 10", et du script. J'ai besoin du nom de votre fichier de script comme argument de ligne de commande, comme
./name_of_script name_of_scriptlog
.Le fichier de temps peut être généré par
la source
delay
blocksize
", il n'y a donc aucune raison de ne pas le faire "0
<entirefile>
" et de vider le tout sans délai. Vous pouvez le faire en prenant la taille du script moins la première ligne (tail -n +2 typescript|wc -c
) et créez le fichier de minutage avececho "0 "`tail -n +2 typescript|wc -c` > timing
. Ce sera essentiellement instantané etscriptreplay
permettra de rejouer l'intégralité du script à la vitesse la plus rapide possible.Vous avez trouvé cette question en cherchant une solution au même problème. Un peu plus de creuser et trouvé ce script sur Live Journal à ce lien. J'ai parfaitement travaillé pour moi. C'est également une très bonne description de ce problème et du fonctionnement de la solution. Vaut vraiment la peine d'être lu. http://jdimpson.livejournal.com/7040.html
la source
Je préférerais utiliser des outils spécialisés pour convertir les sorties de script en texte brut, qui est constamment pris en charge et bien testé, par rapport à une expression rationnelle personnalisée. Donc, cela a fonctionné pour moi:
La commande de script capture dans un fichier dactylographié ansi2txt - convertit le code ansi avec des échappements tels que les codes de couleur, les backspaces, etc. en texte normal. col -bp - les a complètement supprimés.
J'ai testé cela sur la dernière disco Ubuntu, et ça marche.
la source
Il y a une
ansi2txt
commande dans lecolorized-logs
paquet sur Ubuntu. Il supprime les codes de couleur ANSI, mais ne traite pas d'éléments tels que les barres de progression générées par l'émission^H
ou les^M
caractères utilisés pour remplacer le texte à la place.col -b
peut traiter avec ceux-ci , donc pour de meilleurs résultats, vous pouvez combiner les deuxla source
J'ai constaté que
cat
tout ce dont j'avais besoin pour visualiser la sortie duscript
terminal était de l' utiliser . Cela ne permet pas lors de la redirection de la sortie vers un autre fichier, mais ne rend le résultat lisible, à la différencecat -v
,col -b
ou un éditeur de texte.Pour éliminer les couleurs ou enregistrer les résultats dans un fichier, copiez et collez manuellement la sortie
cat
dans un éditeur de texte ou dans une autrecat
commande, par exemple:la source
script
série inclut-elle une sortie avec des codes de couleur attachés, comme dans le cas du PO?cat
présente les couleurs d'origine, qui peuvent être supprimées par copier-coller manuel. Le PO utilisécat -v
etcol -b
, qui présentent tous deux des codes plutôt qu'un résultat final correctement formaté. J'ai édité ma réponse.Suite de la dernière réponse qui utilise tr et: cntrl: pourrions-nous peut-être faire
sed "/^[[:cntrl:]]/d" output.txt
Cela semble fonctionner pour moi car toutes les lignes générées par vi commencent par un caractère de contrôle. Il arrive également de supprimer les lignes vides et les lignes commençant par une tabulation, bien que cela fonctionne pour ce que je fais. Il existe peut-être un moyen de faire correspondre tout caractère de contrôle, à l’exception de \ n \ m \ t.
Peut-être que nous pouvons rechercher le caractère de contrôle particulier, et il semble que toutes les lignes d'ordure générées par vi commencent par ce qui ressemble à ^ [. hexdump me dit que le premier caractère est 1b, donc cela semble fonctionner aussi
sed "/^\x1b/d" output.txt
Cela ressemble à une réponse publiée ci-dessus, mais cela ne fonctionne pas correctement car après l'exécution de la commande, certains caractères indésirables sont déjà ajoutés à la ligne de commande, comme si l'utilisateur les avait saisis.
la source
ls --color
(comme indiqué dans la question), votre solution supprimera presque toutes les lignes contenant des informations. Pas bon. Mais merci d'avoir laissé de côté l'utilisation inutile decat
. :-) tr
- traduire ou supprimer des caractèresla source
01;34m
exemple et supprimera la fin de la lignenewline (\n)
.