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.

kdt
quelle

Antworten:

30

Versuchen:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
rkthkr
quelle
Von den 3 Antworten war dies die einzige, die funktionierte.
SLM
4

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

Vi.
quelle
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.

womble
quelle
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'
linux_sa
quelle