GNU grep
, from globally search a regular expression and print, has a massive man-page and a full set of flags. It’s probably one of our favourite commands, between it’s sheer power and flexibility.
No Comment
If you want to view a file without any comments, you can use grep
‘s inversions to do so:
grep -v '#' /path/to/file
However, this will also remove any lines with inline comments, like this:
# This is a comment variable = value; # This is an inline comment
Adding some anchors to your commands will include lines with inline comments:
grep -v '^#' /path/to/file
The ^
anchors to the start of the line, so any line where the first character is a #
will be hidden.
Indentation makes things a little trickier, but can be handled like so:
grep -v '^\s*#' /path/to/file
Any line where the first non-space character is a #
will be hidden. To make those changes permanent, see our other tip: Removing comments.
Look Around
It’s possible to output lines before or after a match with -B
or -A
respectively.
$ cat file No match Still no match This matches the pattern! Later still: no match No Match 4: The Fifth Line
$ grep -B2 pattern file No match Still no match This matches the pattern! $ grep -A2 pattern file This matches the pattern! Later still: no match No Match 4: The Fifth Line
In addition to -A
and -B
, there’s also -C
: context.
$ grep -C 1 pattern file Still no match This matches the pattern! Later still: no match
Learn to count
Rather than piping grep
into wc
or similar, use -c
to count directly:
$ grep -ci todo file 2 $ grep -cir todo directory/ directory/file:2 directory/other_file:4
There’s two to-do’s in file
, and four in other_file
.
Eyeball it
The word grep
itself can be used as a verb, meaning ‘search for something’. While not really a Linux tip per se, a number of Linux-users will probably pick up on it. We often hear (and say!) that:
You can’t grep dead trees!
Zipped lips
grep
has a wrapper, zgrep
, to grep
through compressed files. Incredibly useful when checking a rotated-out log file, just call it like so:
zgrep pattern /path/to/file.gz
No gunzip
needed!
Photo by Lars_Nissen_Photoart on Pixabay.