Find all files containing a string on Linux/Mac

Sometimes on linux or unix computers, you want to do a search for any files with a particular string within it. This can be useful when searching for specific things for a CI/CD pipeline.

Fortunately, it is not too hard in linux to do this with grep.

Find files which contain a particular string

Return the filename only

The below will find any file that contains the term 'html' in the '/views' directory. It will return only the file names.

shell Copy
grep -rl ./views -e 'html'

Return the text itself

Again, this will find any file containing the string 'html' in the '/views' directory. It will return the line which has that text in it.

shell Copy
grep -r ./views -e 'html'

All Grep Options/Switches

You can string other options together, to get different results. When we say -r, for example, we mean 'recursive' - i.e. it will search through every folder. When we write -rl, this means essentially -r -l, which means search recursively, and return only the file name.

Below is a list of all grep options or switches, which you can add to your query to get the results you need:

  • -r - search recursively.
  • -l - return only the file name.
  • -i - ignore the case.
  • -w - search only for words, i.e. not text within words. efhtmlwq will not work with this option if searching for html.
  • -n - returns the line number, but doesn't work with -l.
  • -s - suppress any error messages.
  • -h - output the line itself, without the line number or file.
  • -v - invert the search, i.e. searching for html with -v will return everything without html.
  • -f - used to indicate a file you want to use which contains a regular expression.
  • -x - match only if the whole lines only. This will only return for a search of html if that exists on its own line separately.
Last Updated Saturday, 22 May 2021