How to find all files containing specific text in Linux? Use grep command

One of the most common task while working in programming projects is finding files containing some specific text e.g. you have your application deployed in Linux server and you are migrating your database from one server to another. Now, you want to file all config files and scripts which are referencing your old database using the hostname or IP address, so that you can replace them with an alias. Well, you should always use an alias to connect to the database or any other system, but sometimes it happens you have to use hostname. Anyway, how do you find all those files containing hostname in your Linux machine? Well, the grep command is here to help you.

The grep command allows you to scan files to find any matching text and you can use the recursive option of grep command to find all files containing a reference to your old database hostnames, or a specific text in general.

You can combine recursive option with ignore case option (-i) to find a specific text e.g. hostname by ignoring case in your config files and scripts. This is the command I frequently use to search all files in different sub-directories for finding reference to a specific text e.g. a hostname which is going to decommission or needs to be migrated:

$ grep -iR text *

The -R option will recursively search files in sub-directories starting from the current directory and -i will search for the text you're provide ignoring case.


By default grep will print both the matching text as well as the name of the file containing matching text, if you are just interested in file names then you can also use the grep command with option -l as shown below:

$ grep -iRl text *

Here is an example of the recursive search with grep command which prints both file and matching text and only file names:

How to find all files containing specific text in Linux? Use grep command



If you also want to search for the whole word, instead of just matching a part of text, then you cause add option -w, which matches the whole word e.g.

$grep -iRlw '-Xms' *

will search for exact "-Xms" text in all files, it is could to find the scripts where you are specifying your JVM arguments.

You can also use options like --exclude, --include, --exclude-dir, and --include-dir for more efficient and fast searching. For example, following command will only search for text in Java files:

$ grep --include=\*.java -iRw text *

You can even use regular expression to provide for more sophisticated search e.g. following command will search for specified text on .c and .h files

$ grep --include=\*.{c,h} -iRw text *

This command will exclude searching all the files ending with .svn extension:

$ grep --exclude=*.svn -iRw '/path/to/file/' -e "pattern"



Important points to remember

1) The grep -r or -R option is used for recursive search

2) The grep -w is used for word search i.e. it will match to exact word

3) The grep -i is used for ignoring case search e..g it will match to "Java", "JAVA", "javA" and other variants.

4) The grep --include is used to search only for certain types of files.

5) The grep --exclude is used to exclude non-interesting files e.g. log files or .svn files.



That's all about how to search for matching text in all files in UNIX and Linux. This command is very powerful and one of the useful tool to find out files referencing direct hostnames instead of aliases. They are very useful for host migrations and database migration. You can even use them while troubleshooting issues.


Further Reading
A Practical Guide to Linux Commands
The Linux Command Line: A Complete Introduction
How Linux Works: What Every Superuser Should Know


Other UNIX command tutorials you may like to explore
  • 10 example of networking command in Unix (example)
  • 10 Example of tar commands in Unix (example)
  • 5 Example of kill commands in Unix and Linux (example)
  • VI Editor examples and tips for beginners (example)
  • How to use the netstat command to find which process is listening on a port? (example)
  • How does nslookup command work in UNIX? (answer)
  • 10 examples of lsof command in Linux? (examples)
  • 10 books to learn essential commands of Linux or UNIX? (list)
  • How Linux works? What Every SuperUser should know? (book)
  • 10 Examples of cURL command in Linux? (examples)
  • How to use CUT command in Linux (tutorial)
  • How to exit from the telnet command in UNIX? (example)
  • How to send HTTP request to call a web service from the command line in Linux? (example)

Thanks for reading this article so far. If you like this article then please share with your friends and colleagues. If you have any question or feedback then please drop a comment.

No comments:

Post a Comment