Ich kann den Befehl "script" verwenden, um eine interaktive Sitzung in der Befehlszeile aufzuzeichnen. Dies schließt jedoch alle Steuerzeichen und Farbcodes ein. Ich kann Steuerzeichen (wie die Rücktaste) mit "col -b" entfernen, aber ich kann keinen einfachen Weg finden, um die Farbcodes zu entfernen.
Beachten Sie, dass ich die Befehlszeile wie gewohnt verwenden möchte, also keine Farben dort deaktivieren möchte - ich möchte sie nur aus der Skriptausgabe entfernen. Ich weiß auch, dass ich herumspielen und versuchen kann, einen regulären Ausdruck zu finden, um das Problem zu beheben, aber ich hoffe, dass es eine einfachere (und zuverlässigere - was ist, wenn es einen Code gibt, über den ich bei der Entwicklung des regulären Ausdrucks nichts weiß?) Lösung gibt.
So zeigen Sie das Problem:
spl62 tmp: script Skript gestartet, Datei ist Typenskript 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 sauber doc-src test.ini spl62 lepl: Ausfahrt Skript fertig, Datei ist Typoskript spl62 tmp: cat -v Typoskript Skript gestartet am Do 09 Jun 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; 32m ^ [00; 32mbuild.sh ^ [[0m ^ [[00mdelete-licence.sed ^ [[0m ^ [[00msetup.py ^ [[0m ^ M ^ [[01; 34m ^ [[0m ^ [[00; 32m ^ M ^ [[00; 32mbuild-doc.sh ^ [[0m ^ [[00; 32mclean ^ [[0m ^ [[01; 34mdoc-src ^ [[0m ^ [[00mtest.ini ^ [[0m ^ M spl62 lepl: Ausfahrt ^ M Skript erstellt am Do 09 Jun 2011 09:47:29 CLT spl62 tmp: col -b <Typoskript Skript gestartet am Do 09 Jun 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: Ausfahrt Skript erstellt am Do 09 Jun 2011 09:47:29 CLT
quelle
Aktualisieren der Antwort von Gilles, um auch Zeilenumbrüche zu entfernen und vorherige Zeichen mit der Rücktaste zu löschen, die mir für ein in Cygwin generiertes Typoskript wichtig waren:
quelle
Ich würde
sed
in diesem Fall verwenden.machen:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed -e "s / search / replace / g" ist Standard. Der reguläre Ausdruck wird wie folgt erklärt:
\x1b
stimmen Sie mit der Escape-Taste überein, bevor der Farbcode\[
mit der ersten offenen Klammer.\{1,5\}
1 bis 5 eines einzelnen Zeichens übereinstimmt. Müssen Sie\
die geschweiften Klammern, um die Schale davon abzuhalten, sie zu zerfleischen.m
Letztes Zeichen in Regex - folgt normalerweise dem Farbcode.//
leere Zeichenfolge, durch die alles ersetzt werden soll.g
stimmen Sie es mehrmals pro Zeile ab.quelle
foo\e[1m(1m = {
wirdfoo = {
stattfoo(m = {
), ersetzt.
durch[0-9;]
ist genauer..\{1,5\}
durch[^m]\{1,5\}
- aber beachten Sie auch, dass dadurch immer noch nur "Grafikwiedergabecodes" (die mit einem endenm
) entfernt werden - im Grunde genommen Farb-, Umkehr-, Fett- und Kursivstile (sofern zutreffend).\x1b(B
(in Rusts Farbausgabe enthalten)\x1b
und nicht\033
?\u001b
statt\x1b
quelle
=> wie benutzt man:
Getestet unter: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora - SunOS
quelle
Ich löste das Problem, indem ich
scriptreplay
auf einem Bildschirm lief und den Scrollback-Puffer in eine Datei abspeicherte.Das folgende Expect-Skript erledigt dies für Sie.
Es wurde auf Logfiles mit bis zu 250.000 Zeilen getestet. Im Arbeitsverzeichnis benötigen Sie Ihr Scriptlog, eine Datei mit dem Namen "time" mit dem 10.000.000-fachen der Zeile "1 10" und das Script. Ich brauche den Namen Ihrer Skriptdatei als Kommandozeilenargument, wie
./name_of_script name_of_scriptlog
.Die Zeitdatei kann von generiert werden
quelle
delay
blocksize
", es gibt also keinen Grund, es nicht einfach "0
<entirefile>
" zu machen und das Ganze ohne Verzögerung zu löschen. Sie können dies tun, indem Sie die Größe des Skripts abzüglich der ersten Zeile (tail -n +2 typescript|wc -c
) nehmen und die Timing-Datei mit erstellenecho "0 "`tail -n +2 typescript|wc -c` > timing
. Das ist im Grunde genommen sofort und spieltscriptreplay
das gesamte Skript mit der schnellstmöglichen Geschwindigkeit ab.Ich habe diese Frage gefunden, als ich nach einer Lösung für das gleiche Problem gesucht habe. Ein bisschen mehr Graben und fand dieses Skript bei Live Journal unter diesem Link. Ich habe perfekt für mich gearbeitet. Es ist auch eine sehr gute Beschreibung dieses Problems und der Funktionsweise der Lösung. Auf jeden Fall eine Lektüre wert. http://jdimpson.livejournal.com/7040.html
quelle
Ich würde es vorziehen, spezielle Tools zu verwenden, um die Skriptausgabe über benutzerdefinierte reguläre Ausdrücke in einfachen Text zu konvertieren, der ständig unterstützt und getestet wird. Das hat also für mich funktioniert:
Skriptbefehl erfasst in Typoskriptdatei ansi2txt - konvertiert Ansi-Code mit Escapezeichen wie Farbcodes, Leerzeichen usw. in regulären Text. Allerdings habe ich festgestellt, dass ein paar Escapezeichen noch übrig sind. col -bp - hat sie vollständig entfernt.
Ich habe dies auf der neuesten Ubuntu-Disco getestet und es funktioniert.
quelle
Das Paket enthält einen
ansi2txt
Befehlcolorized-logs
für Ubuntu. Es entfernt ANSI-Farbcodes in netter Weise, geht aber nicht auf Fortschrittsbalken ein, die durch das Aussenden von Zeichen^H
oder^M
das Überschreiben von vorhandenem Text erzeugt werden.col -b
kann beschäftigen diejenigen , so für die besten Ergebnisse , die Sie kombinieren die beiden könnenquelle
Ich stellte fest, dass nur die Verwendung
cat
von alles war, was ich brauchte, um die Ausgabe vonscript
im Terminal anzuzeigen . Dies hilft nicht , wenn die Ausgabe in einer anderen Datei umleiten, aber das Ergebnis lesbar macht, im Gegensatz zucat -v
,col -b
oder ein Texteditor.Um Farben zu entfernen oder die Ergebnisse in einer Datei zu speichern, kopieren Sie die Ausgabe manuell und fügen Sie sie
cat
in einen Texteditor oder in einen anderencat
Befehl ein.quelle
script
Lauf eine Ausgabe mit angehängten Farbcodes enthalten, wie im Fall des OP?cat
präsentiert die Originalfarben, die durch manuelles Kopieren und Einfügen entfernt werden können. Das OP verwendetcat -v
undcol -b
, wobei beide Codes anstelle eines ordnungsgemäß formatierten Endergebnisses vorhanden sind. Ich habe meine Antwort bearbeitet.Verfolgung der letzten Antwort, die tr und verwendet: cntrl: könnten wir vielleicht tun
sed "/^[[:cntrl:]]/d" output.txt
Dies scheint für mich zu funktionieren, da alle von vi erzeugten Zeilen mit einem Steuerzeichen beginnen. Es passiert auch, dass leere Zeilen und Zeilen, die mit einem Tabulator beginnen, entfernt werden, obwohl das für das funktioniert, was ich tue. Möglicherweise gibt es eine Möglichkeit, ein Steuerzeichen mit Ausnahme von \ n \ m \ t abzugleichen.
Vielleicht können wir nach dem bestimmten Steuerzeichen suchen, und es sieht so aus, als ob alle von vi erzeugten Junk-Zeilen mit ^ [beginnen. hexdump sagt mir, dass das erste Zeichen 1b ist, also scheint das auch zu funktionieren
sed "/^\x1b/d" output.txt
Dies ähnelt einer oben angegebenen Antwort, funktioniert jedoch nicht ordnungsgemäß, da nach dem Ausführen des Befehls der Befehlszeile bereits Junk-Zeichen hinzugefügt wurden, als hätte der Benutzer sie eingegeben.
quelle
ls --color
(wie in der Frage gezeigt) löscht Ihre Lösung beispielsweise fast jede Zeile, die Informationen enthält. Nicht gut. Aber danke, dass du den nutzlosen Gebrauch von weggelassen hastcat
. :-) tr
- Zeichen übersetzen oder löschenquelle
01;34m
und das Zeilenende entferntnewline (\n)
.