grep recursively for a specific file type on Linux

Solution 1:

Consider checking this answer and that one.

Also this might help you: grep certain file types recursively | commandlinefu.com.

The command is:

grep -r --include="*.[ch]" pattern .

And in your case it is:

grep -r --include="*.html" "onblur" .

Solution 2:

grep -r --include "*.html"  onblur .

Got it from : How do I grep recursively?

Solution 3:

You might also like ag 'the silver searcher' -

ag --html onblur

it searches by regexp and is recursive in the current directory by default, and has predefined sets of extensions to search - in this case --html maps to .htm, .html, .shtml, .xhtml. Also ignores binary files, prints filenames, line numbers, and colorizes output by default.

Some options -

-Q --literal
          Do not parse PATTERN as a regular expression. Try to match it literally.
-S --smart-case
          Match case-sensitively if there are any uppercase letters in PATTERN, 
          case-insensitively otherwise. Enabled by default.
-t --all-text
          Search all text files. This doesn't include hidden files.
   --hidden
          Search hidden files. This option obeys ignored files.

For the list of supported filetypes run ag --list-file-types.

The only thing it seems to lack is being able to specify a filetype with an extension, in which case you need to fall back on grep with --include.

Solution 4:

To be able to grep only from .py files by typing grepy mystring I added the following line to my bashrc:

alias grepy='grep -r --include="*.py"' 

Also note that grep accepts The following:

grep mystring *.html for .html search in current folder

grep mystring */*.html for recursive search (excluding any file in current dir!).

grep mystring .*/*/*.html for recursive search (all files in current dir and all files in subdirs)