Grep
Purpose of grep
grep
stands for “global regular expression print”. It allows you to search plain text data sets for strings which match a regular expression or pattern.
Syntax
Schematic
grep [options] [pattern] [source file] > [output file]
Note that above we redirect the file matches to a new file. You don’t have to do this. If you omit the redirection, grep
will output to standard output.
Applied
grep -i -n "banana" fruits.txt > banana.txt
The above example searches, using regex, for strings matching the pattern “banana” in the file fruits.txt
regardless of the character case (-i
ensures this) and outputs its findings to the file banana.txt
, with the line number where the match occurs appended to the output (-n
takes care of this).
Note that for simplicity, you can chain optional values together, i.e. the options in the above example could be input as -in
.
Useful options
- ignore case:
i
- count matches instead of returning actual match:
-c
- precede each match with the line number where it occurs:
-n
- invert the match (show everything that doesn’t match the expression):
-v
- search entire directories recursively:
-r
- list file names where matches occur (in the scenario of a recursive match):
-l
ripgrep
ripgrep
is generally faster however it does not come as default with Unix and only works recursively, i.e. it is designed to find strings within files within multiple directories not just single files or piped streams.
It also respects .gitignore
files that it finds within directories by default and node_modules
which is really handy.
Most of the standard grep
options transfer over.