Skip to content

A tool for stripping control characters and escape sequences from terminal output in Linux.

License

Notifications You must be signed in to change notification settings

emptymonkey/dumb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dumb

dumb is a simple tool for emulating a dumb terminal in Linux by stripping out valid control sequences.

What is a dumb terminal?

A smart terminal is a command-line interface that supports rich features such as formatting, color text, and cursor repositioning. All modern command-lines use terminal emulators which are smart. By contrast, a dumb terminal is only able to print simple ASCII characters, nothing else. Smart terminals work by adding non-printable control characters and escape sequences which are embedded within the output to control those extra features.

dumb strips off all of the valid control characters and escape sequences it finds, producing simple output fit for a dumb terminal.

Wait a minute, can't I just use a quick (perl|python|sed) one-liner to do this?

Probably, but I've never seen anyone get it right. When considering a regex one-liner for this particular task, keep in mind:

  • It's probably more complex than most people will want to remember.
  • It probably won't match everything.
  • It probably will match some stuff that it shouldn't.
  • It will be slower than this tool when handling large inputs.

Holy hell, why did you write this in Lex?!

It seemed like it would be fun. Also it's faster, and Lex lends itself to this sort of problem quite well.

Ok, but why did you need to write this at all?

I needed a forensic tool that would strip off known valid control sequences, but leave behind non-valid binary garbage for further analysis. I didn't find any tools that could do that, so I wrote this one.

(Secretly, I'm hoping to turn my nickname of "that dumb Linux guy" into something positive.)

Usage

dumb reads input on stdin and prints the stripped output to stdout. It has no switches and takes no arguments.

Examples

Here is a simple example:

(Sorry, but I've been unable to convince Github's flavor of Markdown to properly display color text.)

empty@monkey:/usr/games$ ls -l --color
total 24
-rwxr-xr-x 1 root root 22240 Sep 30  2009 fortune
lrwxrwxrwx 1 root root    25 Mar  6 17:36 nethack -> /etc/alternatives/nethack
lrwxrwxrwx 1 root root    39 Mar  6 17:36 nethack-console -> ../lib/games/nethack/nethack-console.sh

empty@monkey:/usr/games$ ls -l --color | dumb 
total 24
-rwxr-xr-x 1 root root 22240 Sep 30  2009 fortune
lrwxrwxrwx 1 root root    25 Mar  6 17:36 nethack -> /etc/alternatives/nethack
lrwxrwxrwx 1 root root    39 Mar  6 17:36 nethack-console -> ../lib/games/nethack/nethack-console.sh

Here, we demonstrate the character stripping by piping the output through xxd:

empty@monkey:/usr/games$ ls -l --color | xxd
0000000: 746f 7461 6c20 3234 0a2d 7277 7872 2d78  total 24.-rwxr-x
0000010: 722d 7820 3120 726f 6f74 2072 6f6f 7420  r-x 1 root root 
0000020: 3232 3234 3020 5365 7020 3330 2020 3230  22240 Sep 30  20
0000030: 3039 201b 5b30 6d1b 5b30 313b 3332 6d66  09 .[0m.[01;32mf
0000040: 6f72 7475 6e65 1b5b 306d 0a6c 7277 7872  ortune.[0m.lrwxr
0000050: 7778 7277 7820 3120 726f 6f74 2072 6f6f  wxrwx 1 root roo
0000060: 7420 2020 2032 3520 4d61 7220 2036 2031  t    25 Mar  6 1
0000070: 373a 3336 201b 5b30 313b 3336 6d6e 6574  7:36 .[01;36mnet
0000080: 6861 636b 1b5b 306d 202d 3e20 1b5b 3031  hack.[0m -> .[01
0000090: 3b33 326d 2f65 7463 2f61 6c74 6572 6e61  ;32m/etc/alterna
00000a0: 7469 7665 732f 6e65 7468 6163 6b1b 5b30  tives/nethack.[0
00000b0: 6d0a 6c72 7778 7277 7872 7778 2031 2072  m.lrwxrwxrwx 1 r
00000c0: 6f6f 7420 726f 6f74 2020 2020 3339 204d  oot root    39 M
00000d0: 6172 2020 3620 3137 3a33 3620 1b5b 3031  ar  6 17:36 .[01
00000e0: 3b33 366d 6e65 7468 6163 6b2d 636f 6e73  ;36mnethack-cons
00000f0: 6f6c 651b 5b30 6d20 2d3e 201b 5b30 313b  ole.[0m -> .[01;
0000100: 3332 6d2e 2e2f 6c69 622f 6761 6d65 732f  32m../lib/games/
0000110: 6e65 7468 6163 6b2f 6e65 7468 6163 6b2d  nethack/nethack-
0000120: 636f 6e73 6f6c 652e 7368 1b5b 306d 0a    console.sh.[0m.

empty@monkey:/usr/games$ ls -l --color | dumb | xxd
0000000: 746f 7461 6c20 3234 0a2d 7277 7872 2d78  total 24.-rwxr-x
0000010: 722d 7820 3120 726f 6f74 2072 6f6f 7420  r-x 1 root root 
0000020: 3232 3234 3020 5365 7020 3330 2020 3230  22240 Sep 30  20
0000030: 3039 2066 6f72 7475 6e65 0a6c 7277 7872  09 fortune.lrwxr
0000040: 7778 7277 7820 3120 726f 6f74 2072 6f6f  wxrwx 1 root roo
0000050: 7420 2020 2032 3520 4d61 7220 2036 2031  t    25 Mar  6 1
0000060: 373a 3336 206e 6574 6861 636b 202d 3e20  7:36 nethack -> 
0000070: 2f65 7463 2f61 6c74 6572 6e61 7469 7665  /etc/alternative
0000080: 732f 6e65 7468 6163 6b0a 6c72 7778 7277  s/nethack.lrwxrw
0000090: 7872 7778 2031 2072 6f6f 7420 726f 6f74  xrwx 1 root root
00000a0: 2020 2020 3339 204d 6172 2020 3620 3137      39 Mar  6 17
00000b0: 3a33 3620 6e65 7468 6163 6b2d 636f 6e73  :36 nethack-cons
00000c0: 6f6c 6520 2d3e 202e 2e2f 6c69 622f 6761  ole -> ../lib/ga
00000d0: 6d65 732f 6e65 7468 6163 6b2f 6e65 7468  mes/nethack/neth
00000e0: 6163 6b2d 636f 6e73 6f6c 652e 7368 0a    ack-console.sh.

Installation

git clone https://github.com/emptymonkey/dumb.git
cd dumb
make

About

A tool for stripping control characters and escape sequences from terminal output in Linux.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published