Bash Pattern Searching Reference (PAL Series)

Update: These were written for my students while my role was a PAL (Peer Assisted Learning) Leader for my course, I intended to keep all the basic/intermediate commands necessary for terminal use in one place to ease the students into using Linux efficiently. I’ve kept them up just in case they’re of use to someone.


* – Match anything
? – Match a single character

$ ls
render_10.exr render_13.exr scene_10.tif scene_9.exr
render_11.exr render_14.exr scene_11.exr scene_9.tif
render_12.exr scene_10.exr scene_11.tif
$ ls scene*       # Match any file beginning with "scene"
scene_10.exr scene_11.exr scene_9.exr
scene_10.tif scene_11.tif scene_9.tif
$ ls *.exr        # Match any file ending with ".exr"
render_10.exr render_12.exr render_14.exr scene_11.exr
render_11.exr render_13.exr scene_10.exr scene_9.exr
$ ls scene_?.tif  # Match scene_1.tif, scene_2.tif, scene_3.tif etc but not scene_10.tif
$ ls scene_??.tif # Match scene_10.tif etc but not scene_1.tif etc
scene_10.tif scene_11.tif


Allows for much more powerful pattern matching than wildcards alone, but you need to learn regular expressions to really utilise it’s power.

A simple usage however is to search the output of a command

$ history | grep "touch *"
 2006 touch output.exr 
 2011 touch {a,b}{x,y,z}
 2013 touch {a,b}/{x,y,z}
 2021 touch {a,b}/{x,y,z}
 2022 touch {a,b}{x,y,z}

You can also use it directly on a file to search just that file

$ grep TARGET      # Search for string "TARGET" in 
 QMAKE_EXTRA_TARGETS += first copydata