Skip to content
A simple stream filter to highlight patterns
Pull request Compare This branch is 2 commits ahead, 9 commits behind cespare:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


discoball is a tool to filter streams and colorize patterns. It functions somewhat like egrep --color, except that it can highlight multiple patterns (in different colors). Patterns are arbitrary ruby regexes that are matched against the entire line.


$ discoball [options] <pattern1 pattern2 ...>

where options are:

  • --group-colors or -g: Color all matches of the same pattern with the same color
  • --one-color or -o: Highlight all matches with a single color
  • --match-any or -m: Only print lines matching an input pattern
  • --match-all or -a: Only print lines matching all input patterns
  • --help or -h: Print the help message


  • Highlight instances of "foo" and "bar" in the text of myfile.txt:

    $ cat myfile.txt | discoball foo bar
  • Highlight paths of processes running out of /usr/sbin/:

    $ ps -ef | discoball --one-color --match-any '/usr/sbin/.*$'
  • I wrote discoball for use with Steve Losh's todo-list tool, t. I put tags on my tasks annotated with + (inspired by Todo.txt):

    $ t Make an appointment with the dentist +health

    When I list my tasks (using t), I use discoball to highlight the tags with different colors:

    $ t | discoball '\+\S+'

    I can even do some fancier stuff to list particular labels. I have the following function defined in my .bashrc:

    function tl() {
      if [ -z  "$1" ]; then
        t | discoball '\+\S+'
        t | discoball -a "${@/#/\+}"

    I can use this as follows:

    $ tl               # ~> Show the list of tasks, with tags highlighted
    $ tl health urgent # ~> Show only tasks tagged with 'health' and 'urgent'


    Discoball + t demo


The easiest way to get discoball is by using pip (or easy_install): $ pip install discoball.

Something went wrong with that request. Please try again.