10

How can I either strip the following character sequences from my files? ^[[64;8H, ^[[?25h, ^[[1;64r etc or avoid having expect add them in the first place?

Background:

I'm using a collection of expect scripts for certain tasks.

The output files I'm collecting often contain the above type of characters (as displayed in emacs / vi / cat -v). I've tried a number of tr commands like the following but it only makes the [64;8H etc visible.

tr -dc '[:print:]\n' < input

EDIT:

The results from above on a problematic line

[1;64r[64;1H[64;1H[2K[64;1H[?25h[64;1H[64;.....
Tim Brigham
  • 1,017
  • 1
  • 13
  • 22

2 Answers2

7

You were close. You want

tr -dc '[:print:]\n' <input

From the tr(1) man page:

-c, -C, --complement
use the complement of SET1

Update

If you want to remove escape sequences as well, you can use the following sed snippet:

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

It's taken from a serverfault question called In CentOS 4.4, how can I strip escape sequences from a text file?

Joseph R.
  • 38,849
  • 7
  • 107
  • 143
1

After some experimentation (I use the fish shell, which colourizes everything):

perl -pe '
    s/\033\\\\\[(\d+;)*\d*[[:alpha:]]//g;
    s/\033\\\\\]0;//g;
    s/\x7//g;
    s/\033\(B//g;
' expect.log
glenn jackman
  • 84,176
  • 15
  • 116
  • 168