Are you looking for hands on guide on Linux grep command ? In this guide, we will cover 14 grep command examples in linux.
Grep is a command line tool in Linux/Unix systems that is used to search text or string from a file. Grep stands for global regular expression print. When we run a grep command with specified string, if its is matched, then it will display the line of the file containing that string without modifying the contents of the existing file.
Syntax of grep command
$ grep <Options> <Search String> <File-Name>
Without any further delay, let’s deep dive into grep command examples.
1) Searching a word or string in a file
When we run grep command followed by search string or pattern then it will print the matching line of a file. Example is shown below.
Search a word “nobody” word in the file /etc/passwd file,
$ grep nobody /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin $
2) Searching pattern in the multiple files
A word or a pattern can be searched in multiple files using grep command. Run following to search ‘linuxtechi’ word in /etc/passwd, /etc/shadow and /etc/gshadow files.
$ sudo grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow
3) Print file names that matches the pattern
Let’s assume we want to list the files names which contains word ‘root’, to do so use ‘-l’ option in grep command followed by word (pattern) and files.
$ grep -l 'root' /etc/fstab /etc/passwd /etc/mtab /etc/passwd $
4) Display the line number with output lines
Use ‘-n’ option in grep command to display line and its number which matches the pattern or word. In below example, pattern is ‘nobody’
$ grep -n 'nobody' /etc/passwd 18:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin $
5) Invert the pattern match
Using the option ‘-v’ in grep command, we can display the lines which don’t match the pattern
$ grep -v 'nobody' /etc/passwd
6) Print all lines that starts with specific pattern
Bash shell treats caret symbol (^) as a special character which marks the beginning of line or a word. Let’s display the lines which starts with “backup” word in the file /etc/passwd, run
$ grep ^backup /etc/passwd backup:x:34:34:backup:/var/backups:/usr/sbin/nologin $
7) Print all the lines that ends with specific word
Bash shell treats dollar symbol ‘$’ as a special character which marks the ends of line or word. List all the lines of /etc/passwd that ends with “bash” word.
$ grep bash$ /etc/passwd root:x:0:0:root:/root:/bin/bash linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash $
8) Searching pattern recursively
‘-r’ option in grep command is used to search pattern recursively in folder and sub-folders. Let’s suppose, we want to search a pattern ‘nologin’ in /etc folder recursively.
$ sudo grep -r nobody /etc /etc/shadow:nobody:*:19101:0:99999:7::: /etc/shadow-:nobody:*:19101:0:99999:7::: /etc/passwd:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin /etc/ssh/sshd_config:#AuthorizedKeysCommandUser nobody /etc/passwd-:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin $
Above command will search ‘nobody’ pattern in the “/etc” directory recursively.
9) Print all the empty lines of a file
Grep command can also print all the empty or blank lines from a file use the special character combination ‘^$’ , example is shown below:
$ grep '^$' /etc/sysctl.conf
To print the line numbers of empty lines, run
$ grep -n '^$' /etc/sysctl.conf
10) Ignore letter case while searching
‘-i’ option in the grep command ignore case distinctions in patterns and data. When we use ‘-i’ then it will not discriminate upper case or lower case letters while searching.
Let’s assume we want search ‘IP_Forward’ string in sysctl.conf file, run
$ grep IP_Forward /etc/sysctl.conf $ $ grep -i IP_Forward /etc/sysctl.conf #net.ipv4.ip_forward=1 $
Grep command can also used to match only whole words using ‘-w’ option, example is shown below,
$ sudo sysctl -a | grep -w 'vm.swappiness' vm.swappiness = 60 $
Above command will search and look for the lines which have exactly “vm.swappiness” word.
11) Matching multiple patterns
With the help of ‘-e’ option in grep command, we can search multiple patterns in a single command. Example is listed belpw:
$ grep -e nobody -e mail /etc/passwd mail:x:8:8:mail:/var/mail:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin $ or $ grep -E "nobody|mail" /etc/passwd mail:x:8:8:mail:/var/mail:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin $
12) Takes pattern from a file
‘-f’ option in grep command enables to take patterns from file. Example is demonstrated below:
First create a search pattern file with name “grep_pattern” in your current working directory. In my case put following content in it.
$ cat grep_pattern ^linuxtechi root false$ $
Now try to search using grep_pattern file.
$ grep -f grep_pattern /etc/passwd
13) Count the number of lines that matches the pattern
If you wish to count number of lines that matches the search pattern then use ‘-c’ option in grep command.
Let’s consider we want to count the numbers of lines which ends with false word in /etc/password file, run
$ grep -c false$ /etc/passwd 6 $
14) Print N lines before & after pattern matching
Grep command can also print n number of lines before and after matching the pattern using -B and -A options respectively.
a) Print four lines before pattern matching
$ grep -B 4 "games" /etc/passwd
b) Print four lines after pattern matching, use -A option in grep command
$ grep -A 4 "games" /etc/passwd
c) Print Four lines around the matching pattern, use -C option
$ grep -C 4 "games" /etc/passwd
That’s all from this guide, I hope these examples will help you to understand how to use grep command in linux more efficiently. Please do post your queries and feedback in below comments section.
Also Read: 10 rm Command Examples for Linux Beginners