In CentOS 4.4, how can I strip escape sequences from a text file?

What command can I use to strip color-code escape sequences from a text file? Ideally something I can pipe through. If I have a file with a bunch of coloured text rainbow.txt, what goes in the gap:

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

I'm working in bash on CentOS 4.4.


Solution 1:

Try:

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

Solution 2:

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

Solution 3:

You can't, because what is an escape sequence isn't well-defined in general -- you need to know what sort of terminal your escape sequences are designed for. If you want to restrict the problem to "strip ANSI colour sequences" (a fairly likely assumption), something like:

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

Should do the trick.

Solution 4:

The following will capture the [Xm, [X;m, [X;Ym, and [X;Y;Zm possibilities (some of those may be technically incorrect, but they work and have been seen in the wild):

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