To find all files containing a specific string of text on a Linux system, you can use the command combined with options to perform a recursive search and print the file names along with line numbers where the text is found. Here’s a commonly used and efficient command:

grep -Rnw '/path/to/search/' -e 'text-to-find-here'

Explanation of the options used

  • -R or -r: Recursively search through directories.
  • -n: Display the line numbers where matches occur.
  • -w: Match the whole word.
  • -e: The pattern to search for.

Additionally, you can use other grep options for more refined searches:

  • --include=\*.{c,h}: Search only files with specific extensions (e.g., .c and .h files).
  • --exclude=\*.o: Exclude files with specific extensions (e.g., .o files).
  • --exclude-dir={dir1,dir2}: Exclude specific directories.

Here’s an example that searches through .c and .h files, excluding .o files and certain directories:

grep --include=\*.{c,h} --exclude=\*.o --exclude-dir={dir1,dir2} -rnw '/path/to/search/' -e 'text-to-find-here'

For even faster searches, especially in larger projects, you might consider using ripgrep (rg), which is optimized for speed:

rg 'text-to-find-here' /path/to/search/

ripgrep supports similar options to grep and respects .gitignore files by default, making it an excellent tool for codebases.

How to Search for Files Containing Specific Text in Linux