A colleague was tinkering with grep and, thanks to him, I discovered a bit more about the trusty little utility.
I had not really explored the -e switch: -
-e pattern, --regexp=pattern
Specify a pattern used during the search of the input: an input line is selected if it matches any of the specified patterns. This option is
most useful when multiple -e options are used to specify multiple patterns, or when a pattern begins with a dash (‘-’).
but he pointed out that that switch can have problems when parsing, say, a list of strings that are similar but different.
As an example, I have a set of files: -
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:34 dave
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:34 dave_1
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:36 dave_2
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:36 dave_3
If I want to e.g. query a directory for all files containing the word 'dave' I could do this: -
ls -al | grep dave
or, to be more specific: -
ls -al | grep -e Dave
both of which return: -
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:34 dave
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:34 dave_1
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:36 dave_2
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:36 dave_3
However, if I only want to return the file that's named 'dave' and ignore the rest, I'm somewhat stymied.
However, grep -w comes to the rescue: -
-w, --word-regexp
The expression is searched for as a word (as if surrounded by ‘[[:<:]]’ and ‘[[:>:]]’; see re_format(7)). This option has no effect if -x is
also specified.
so I can run: -
ls -al | grep -w dave
and just get this: -
-rw-r--r-- 1 hayd wheel 0 22 Jul 17:34 Dave
Isn't that nifty ?
No comments:
Post a Comment