Apart from grep and regular expressions, there's a good deal of pattern matching that you can do directly in the shell, without having to use an external program.
As you already know, the asterisk (*) and the question mark (?) match any string or any single character, respectively. Quote these special characters to match them literally:
cathy ~>
touch"*"
cathy ~>
ls"*"
*
But you can also use the square braces to match any enclosed character or range of characters, if pairs of characters are separated by a hyphen. An example:
cathy ~>
ls-ld
[a-cx-z]*
drwxr-xr-x 2 cathy cathy 4096 Jul 20 2002 app-defaults/ drwxrwxr-x 4 cathy cathy 4096 May 25 2002 arabic/ drwxrwxr-x 2 cathy cathy 4096 Mar 4 18:30 bin/ drwxr-xr-x 7 cathy cathy 4096 Sep 2 2001 crossover/ drwxrwxr-x 3 cathy cathy 4096 Mar 22 2002 xml/
This lists all files in cathy's home directory, starting with “a”, “b”, “c”, “x”, “y” or “z”.
If the first character within the braces is “!” or “^”, any character not enclosed will be matched. To match the dash (“-”), include it as the first or last character in the set. The sorting depends on the current locale and of the value of the LC_COLLATE
variable, if it is set. Mind that other locales might interpret “[a-cx-z]” as “[aBbCcXxYyZz]” if sorting is done in dictionary order. If you want to be sure to have the traditional interpretation of ranges, force this behavior by setting LC_COLLATE
or LC_ALL
to “C”.
Character classes can be specified within the square braces, using the syntax [:CLASS:], where CLASS is defined in the POSIX standard and has one of the values
“alnum”, “alpha”, “ascii”, “blank”, “cntrl”, “digit”, “graph”, “lower”, “print”, “punct”, “space”, “upper”, “word” or “xdigit”.
Some examples:
cathy ~>
ls-ld
[[:digit:]]*
drwxrwxr-x 2 cathy cathy 4096 Apr 20 13:45 2/cathy ~>
ls-ld
[[:upper:]]*
drwxrwxr-- 3 cathy cathy 4096 Sep 30 2001 Nautilus/ drwxrwxr-x 4 cathy cathy 4096 Jul 11 2002 OpenOffice.org1.0/ -rw-rw-r-- 1 cathy cathy 997376 Apr 18 15:39 Schedule.sdc
When the extglob
shell option is enabled (using the shopt built-in), several extended pattern matching operators are recognized. Read more in the Bash info pages, section → → → .