Is there a method to colorize the output of cat
, the way grep
does.
For grep
, in most consoles it displays a colored output highlighting the searched keywords. Otherwise, you can force it by calling grep --color
Is there a generic way to color the output of any program according to your personal choice.
From what I understand, the program itself is not responsible for the colors. It is the shell.
I am using the default shell in FreeBSD 5.2.1 which looks like it has never seen colors since epoch.
I have written the small script to perform the colourization using
pygmentize
.And then make an alias to script.
alias cat=colorize_via_pygmentize
. Also dont forget to save this in ~/.bashrc.The best way and the easiest way to do it if you have vim in your machine is to use
vimcat
which comes withvimpager
program.git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
Run vimcat:
vimcat index.html
cat
with syntax highlighting is simply out of scope.cat
is not meant for that. If you just want to have the entire content of some file coloured in some way (with the same colour for the whole file), you can make use of terminal escape sequences to control the color.Here's a sample script that will choose the colour based on the file type (you can use something like this instead of invoking
cat
directly):The above (on a terminal that supports those escape sequences) will print any text file as 'bold', and will print any binary file as red. You can use
strings
instead ofcat
for printing binary files and you can enhance the logic to make it suit your needs.The tool you're looking for is probably supercat (here's a quick introduction published by Linux Journal).
I realize that this answer is late, and that it doesn't fully meet the OP requirements. So I'm adding it just for reference (it could be useful for other people looking for how to colorize text file output).
There is a colorized version of cat - ccat. Get it from https://github.com/jingweno/ccat/.
Installation on Linux/Windows/macOS
It is a single standalone executable so to install it you can unpack the binary version for your OS from https://github.com/jingweno/ccat/releases and copy the ccat binary for example to
/usr/local/bin
.If you want to avoid binaries, or if there is no binary for your platform (e.g. raspberry pi, etc), then you can alternately compile from source given that you have a working
go
development environment (apt install golang
on debian-based linuxes orbrew install golang
on mac):Installing on Mac via homebrew
Alias to
cat
To replace regular
cat
withccat
add in~/.bashrc
:ccat
is implemented in Go, so it is a native binary which runs much faster than Python-based solutions, such as pygments, the module behindpygmentize
; I didn't see any noticeable speed difference betweencat
andccat
.That't not correct. Terminal just interprets the color codes that is output to the terminal. Depending on its capability it can ignore certain formatting/coloring codes.
From man page it does not seem cat supports coloring its output. Even if it were to support coloring like grep what should it color in the text file? Syntax highlighting required knowledge of underlying language which is not in the scope of simple utility like cat.
You can try more powerful editors like vim,emacs, gedit etc on unix platform if seeing the code highlighted is your goal.