2016-04-11 10 views
1

Ich habe eine Ausgabedatei von einem Testskript (die ich nicht ändern kann), die Ausgabe sieht gut aus im Terminal dank der Codierung, die die Ausgabe in schönen Farben anzeigt.Entfernen Farbcode von Linux-Dateien

Allerdings, wenn ich die Datei vim, erhalte ich folgendes:

^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m 

würde ich eher die Datei enthalten:

0024, unknown.10 --> UNKNOWN 

Es gibt ein paar ähnliche Fragen auf stackover fließen, aber so Bisher habe ich keine Lösung gefunden, die für mich funktioniert.

Jede Hilfe würde sehr geschätzt werden!

Vielen Dank!

Zusätzliche Informationen:

Ich will nicht die Farbzeichen zu verbergen, würde Ich mag sie aus der Datei entfernen.

Die Ausgabe wird in eine Beweisdatei übertragen, und dann wird diese Datei an ein GIT übergeben, damit das Team sie überprüfen kann. Es ist schwierig, die GIT UI mit dem Farbcodes :(

+0

Siehe http://unix.stackexchange.com/questions/7695/how-to-make-vim-display-colors-as-indicated-by-color-codes –

+0

Ich möchte nicht die Farbzeichen verbergen Ich möchte sie entfernen. Die Ausgabe wird in eine Beweisdatei übertragen, und diese Datei wird dann an ein GIT übergeben, damit das Team sie überprüfen kann. Es ist schwierig, die GIT-Benutzeroberfläche mit diesen Farbcodes :( –

Antwort

1

Wenn Sie sich nicht aus dem Werkzeug produziert die Ausgabe entfernen, könnten Sie immer noch sie anschließend mit dem folgenden sed Befehl entfernen:

sed -r 's/\^\[\[[0-9]{1,2}m//g' 

Beispiel:

$ echo """^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m""" | sed -r 's/\^\[\[[0-9]{1,2}m//g' 
0024, unknown.10 --> UNKNOWN 
+0

Ich lief sed wie folgt: cat bad_file | sed -r 's/\^\ [\ [[0-9] {1,2} m // g' >> good_file und es hatte immer noch den unerwünschten Text Ich nehme an, ich führe den Befehl falsch aus –

+0

1) Ja, Sie sollten sed wie folgt ausführen: 'sed -r 's/\^[[[0-9] {1 , 2} m // g 'badFile', wenn die Ausgabe auf stdout (dh um es umzulenken: 'sed pattern badFile> goodFile') oder' sed -ir '/ \^[[[0-9] {1 , 2} m // g 'badFile', wenn Sie die Datei 'in-place' bearbeiten möchten.2) Ich denke, dass Sie olivs Antwort stattdessen verwenden müssen, nahm ich keine Sonderzeichen in Betracht – Aaron

+0

Tatsächlich ist Ihr Befehl an sich nicht falsch und sollte arbeiten. Es ist einfacher, die Datei an den Befehl sed zu übergeben als an 'cat', und das Flag' -i' vereinfacht die Dateibearbeitung. – Aaron

1

Farbsteuerzeichen zu entfernen, können Sie den folgenden sed-Befehl verwenden:

sed 's/\x1b\[[^\x1b]*m//g' file 

Wie in here angegeben, besteht der Farbcode aus <Esc>[FormatCodem.

Das Escape-Zeichen ist \x1b in hexadezimal (manchmal als \e oder \033 notiert).

Der Befehl sucht nach der Sequenz Escape, gefolgt von der eckigen Klammer \x1b\[, bis das Zeichen m, falls gefunden, es löscht.

Alles zwischen diesen 2 Zeichen ist erlaubt, außer dem Escape-Zeichen selbst [^\x1b]*. Dies ermöglicht den kürzesten Regex.

+0

bei weiterer Analyse sieht es aus wie Ihre Regex versehentlich einige Daten entfernt :(0011, e -> z Sollte sein: 0011, zone_name.src_zone_name -> dmz –

+0

Es ist schwierig zu erraten, was falsch ist, ohne die genaue Probe, die gibt Sie können auch versuchen, 'sed' s/\ x1b \ [[^ m] * m // g''. Wenn das nicht funktioniert, kopieren Sie bitte die Eingabedaten. – oliv