Syntax highlighting in terminal

Syntax highlighted cat

I was just quickly flipping through code on a terminal and got to thinking that it would be pretty handy to be able to syntax highlight when using head or grep without having to open an editor. Luckily, I remembered Pygmentize was pretty handy when syntax highlighting in LaTeX so I wondered if they had an equivalent output for terminal. It turns out they do (in standard or 256 color no less) so in a couple minutes I had a really short script for highlighting code at the terminal saved it to bin/ccat and was ready to go. Pygmentize really is impressive. Here's the script if anyone else is looking to do the same:

BASH:
  1. #!/bin/bash#!/bin/bash
  2. if [ ! -t 0 ];then
  3.         file=/dev/stdin
  4. elif [ -f $1 ];then
  5.         file=$1
  6. else
  7.         echo "Usage: $0 code.c"
  8.         echo "or e.g. head code.c|$0"
  9.         exit 1
  10. fi
  11. pygmentize -f terminal -g $file

It just looks for stdin and if it doesn't find it it looks for a file name or takes direct input. Obviously it requires Pygmentize (which is really easy to install if you already have Python).

Bash/UNIX
Programmer

Comments (7)

Permalink

Tab Indented Standard Input Redirect in Bash

I managed to forget how to redirect standard input (when you want to feed a bunch of lines to a program) in a bash script while still indenting and had to go digging around for it. So I figured I'd make a note here so I don't forget again and for anyone else in the same boat. It's just <<- instead of <<. For example if you want to keep indentation within a loop:

BASH:
  1. for i in 1 2 3 4;do
  2.     cat<<-EOF
  3.         This is loop $i
  4.         More advanced stuff could go here
  5.     EOF
  6. done

You can use whatever you want to indicate the end of the input instead of EOF if it floats your boat (as long as you use the same thing both times) but unfortunately <<- doesn't work with spaces for indentation (although I'm a tab man myself).

Bash/UNIX
Programmer

Comments (2)

Permalink

Counting Q20 Bases in a .qual File

I sometimes get asked to count the number of bases with qualities greater than or equal to 20 in a quality file. I'm not entirely sure this is all that good a metric with 454 sequencing but that's another story. It always takes me a minute or two to come up with the right Unix commands to do it so I'm going to post it here so I remember (and maybe save someone else a couple minutes).

cat *qual|grep '^[^>]'|sed 's/ /\n/g'|grep -c [234][0-9]

This is very quick and dirty (just removing lines starting with ">", replacing spaces with newlines and counting the resulting lines with quals 20-40) but it seems to work ok for me. Also yes I know it's stupid to cat to a grep but I often replace the cat with head for testing. And I'm sure you could do it in a single awk or sed step but it gets done in a minute or two for several hundred million bases so I haven't really been motivated to change it.

Bash/UNIX
Bioinformatics
Biologist
Programmer

Comments (1)

Permalink

Using quotation marks effectively in Unix

This is pretty basic knowledge but I've helped a few people out recently that had been using Unix/Linux for a while and didn't know and it sure helped me out when I figured it out. If you had asked me how many quotation marks were on a keyboard before I started doing Bash stuff I would have said two. But I, and it seems most non-programmers, often forget the little ` on the same key as the tilde ~ (to the left of the numbers on standard keyboards). So there are actually three types of quotation marks and each one means something different to Unix:

Continue Reading »

Bash/UNIX
Programmer

Comments (7)

Permalink

Reading Standard Input in a Bash Shell Script

I guess this is obvious to most people but it took me quite a while to dig it out on the internet. I wanted my bash script to be able to read from standard input like cat sourcefile.txt|bash myscript.bash. It turns out the standard input can be read from /dev/stdin. So if I wanted to sort the standard input, myscript.bash would look like: sort /dev/stdin

I think this is probably basic UNIX knowledge but I'm not a programmer.

Bash/UNIX
Programmer

Comments (6)

Permalink