Wie kann ich in CentOS 4.4 Escape-Sequenzen aus einer Textdatei entfernen?


17

Welchen Befehl kann ich verwenden, um Farbcode-Escape-Sequenzen aus einer Textdatei zu entfernen? Idealerweise etwas, durch das ich pfeifen kann. Wenn ich eine Datei mit einer Reihe von farbigem Text rainbow.txt habe, was geht in die Lücke:

cat rainbox.txt | *something* > plain.txt

Ich arbeite in Bash auf CentOS 4.4.

Antworten:


30

Versuchen:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

Von den 3 Antworten war dies die einzige, die funktionierte.
SLM

4

cat rainbox.txt | col -b > plain.txt


Warum gibt es keine Gegenstimme dazu? Die einzige Lösung, die bei mir funktioniert! Und es ist verdammt einfach!
Phunehehe

3
Weil es bei mir nicht funktioniert.
lzap

6
Dadurch werden nur die Escape-Zeichen und nicht deren Argumente entfernt.
Aaron

1

Dies ist nicht möglich, da eine Escape-Sequenz im Allgemeinen nicht genau definiert ist. Sie müssen wissen, für welche Art von Terminal Ihre Escape-Sequenzen ausgelegt sind. Wenn Sie das Problem auf "Entfernen von ANSI-Farbsequenzen" beschränken möchten (eine ziemlich wahrscheinliche Annahme), etwa:

sed 's/\o033\[[0-9]*;[0-9]*m//g'

Sollte den Trick machen.


1

Das Folgende wird die Möglichkeiten von [Xm , [X; m , [X; Ym und [X; Y; Zm erfassen (einige davon sind möglicherweise technisch inkorrekt, funktionieren aber und wurden in der Natur gesehen):

sed -r 's|\x1B\[[0-9]{1,2};?(;[0-9]{1,2}){,2}m||g'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.