HowTo: Use Grep Command In Unix / Linux To Search Subdirectories

Posted on in Categories , , last updated October 20, 2012

I would like to search and find all files which contain a word called “main()” for all directories located in $HOME/project/school. How do I use the grep command to find text including all subdirs under Unix or Linux operating systems?

The grep command is used to search text for patterns (words) specified on the command line. You need to use the following syntax:

grep -r 'word' /path/to/dir

The -r option is used to search recursively through an entire directory tree. For example, the following would search all files in the current directory and in all of its subdirectories including their subdirectories for every line containing the word “main()”:

grep -r 'main()' ~/projects/school

You can also display the name of each file from which output would normally have been printed with the -l option:

grep -rl 'main()' ~/projects/school

You can print the file name for each match with -H option:

grep -rH 'main()' ~/projects/school

Finally, you can display line number too with the -n option:

grep -rHn 'main()' ~/projects/school

The -i option instructs grep to ignore case. Thus, for instance, the the following example could very easily be converted to a case-insensitive search as follows (match main(), MAIN(), mAiN() and so on):

grep -rHni 'main()' ~/projects/school

In this example, search for an IP address 192.168.1.5:

grep -Hrn --color '\<192.168.1.5\>' /etc

Sample outputs:

Fig.01: grep in action
Fig.01: grep in action

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

5 comment

Leave a Comment