Table of Contents

Filter any command output easily using pipes and the ‘grep’ command.

Basic usage

  • Search a word in a file. This command will output every line that contains some_word in file.txt.
grep some_word file.txt
  • Search a word in a command output. You can pipe the output of a command to grep to look for a word.
$ lsblk | grep sda
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   499M  0 part 
├─sda2   8:2    0   100M  0 part /boot
├─sda3   8:3    0    16M  0 part 
├─sda4   8:4    0 143.4G  0 part 
├─sda5   8:5    0 127.3G  0 part /
└─sda6   8:6    0 194.5G  0 part 
  • When using grep to filter ps command, you can enclose the first letter of the search term in brackets ([]) to not show grep command itself:
$ ps aux | grep mousepad
ricardo    33107  0.0  0.9 699756 58988 ?        Sl   abr25   0:00 /usr/bin/mousepad /home/ricardo/Documents/some_file.txt
ricardo    43299  0.0  0.0   9208  2604 pts/1    S+   17:37   0:00 grep mousepad
$ ps aux | grep [m]ousepad
ricardo    33107  0.0  0.9 699756 58988 ?        Sl   abr25   0:00 /usr/bin/mousepad /home/ricardo/Documents/some_file.txt

Patterns

  • You can use regular expressions. You need to put single quotes around them (it can work without them in some cases, but it’s recommended to use them).
$ lsblk | grep 'sda[1|2]'
├─sda1   8:1    0   499M  0 part 
├─sda2   8:2    0   100M  0 part /boot
$ lsblk | grep '/$'
├─sda5   8:5    0 127.3G  0 part /
  • Searching filenames that contains one word OR another:
$ ls Documents/ | grep 'backup\|manual'
backup-obs
manual-civic.pdf
manual-image-420.jpg
manual-image-462.jpg
manual-image-463.jpg
# Same as:
ls Documents/ | grep -e 'backup' -e 'manual'
  • Searching filenames that contains one word AND another:
$ ls Pictures/ | grep 'png' | grep 'IMG'
IMG_6840.png
IMG_7471.png
ls Pictures/ | grep -E 'IMG.*png|png.*IMG'

Command options

  • -v: look for the inverse.
  • -i: ignore case.
  • -c: print the count of matching lines.
$ lsblk | grep -c sda
7
  • -o: print only the match part of a matching line.
  • -R: search recursively. -r does not follow symlinks.
grep -R someword posts/*
  • -A <number>: print <number> lines after matching lines.
  • -B <number>: print <number> lines before matching lines.
  • -C <number>: print <number> lines before and after matching lines.
Test with this online terminal:

If you have any suggestion, feel free to contact me via social media or email.