Recent Changes - Search:

Basics

Languages

Tools

OS

Resources

PmWiki

pmwiki.org

edit SideBar

Grep

Grep will find a specific string called the pattern from within a target file. The syntax is:

grep [options] [pattern] [target]

Its simplest use is:

grep pattern target

It will return every lines in the target file in which the requested pattern was found.

Useful options

-c
Count and return the number of matches instead of the matches themselves.
-i
Case insensitive.
-m #
Only display the first # matches.
-v
Inverse match, to find lines which do not contain the pattern.

Using wildcards in Grep

Grep is different from the command line when it comes to wildcards (the * character). In the command line, a * means anything. In grep, * means "any number of the previous thing" (Note: Any number also includes 0), while . means "one instance of anything". The . and * can be combined together to make "any number of anything", the grep equivalent of the command line's *. Below are examples of looking for:

  1. an "a" followed by a "b" with any one character in between
  2. an "a" followed by a "b" with any number of spaces in between
  3. an "a" followed by a "b" with anything in between
grep 'a.b' target
grep 'a *b' target
grep 'a.*b' target

Along with the * for any number of repetitions, you can also use:

?
The preceding item is optional and matched at most once.
*
The preceding item will be matched zero or more times.
+
The preceding item will be matched one or more times.
{n}
The preceding item is matched exactly n times.
{n,}
The preceding item is matched n or more times.
{,m}
The preceding item is matched at most m times. This is a GNU extension.
{n,m}
The preceding item is matched at least n times, but not more than m times.

NOT using wildcards in Grep

Sometimes you actually want to look for a * in a file, which will not really work because it is a wildcard, as mentioned above. In order to do so, you can use '[*]', which will use the literal character * instead of the wildcard. If you are looking for a specific number of multiples, you will need to repeat the whole definition, like '[*][*][*]'. However, if you are looking for any number of *, you can use '[*]*', which is combining the literal character with the "any number of the previous thing" wildcard!

Looking for a set of values

It is also possible to use the square brackets to define a set of values to look for. For either of two values (ex.: 1 or 2), the syntax is '[12]'. When wanting a number or letter in a range, it is possible to use dashes in between the ends of the range. So for example, if looking for a number between 1 and 5, the syntax is '[1-5]'.

Edit - History - Print - Recent Changes - Search
Page last modified on February 24, 2016, at 04:43 PM