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

Categorized in: