17

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.

4 Answers 4

30

Try:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
1
  • Of the 3 answers this was the only one that worked.
    – slm
    Jul 18, 2014 at 22:41
4

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

3
  • Why isn't there any upvote on this? The only solution that works for me! And it's damn simple too!
    – phunehehe
    Dec 4, 2011 at 15:35
  • 3
    Because it does not work for me.
    – lzap
    Mar 20, 2012 at 10:04
  • 6
    This only gets rid of the escape characters, not their arguments.
    – Aaron
    Sep 7, 2012 at 13:22
1

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.

1

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'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.