11

Let's say I need to find the function GetTypes() in all C# source file (.cs) the directories/subdirectories.

I used grep -rn GetTypes *.cs, but I got an error with grep: *.cs: No such file or directory. I had to use grep -rn GetTypes *, but in this case it shows all the files not *.cs only.

What command do I need to use to find the string only in .cs files?

13

If your shell is bash ≥4, put shopt -s globstar in your ~/.bashrc. If your shell is zsh, you're good. Then you can run

grep -n GetTypes **/*.cs

**/*.cs means all the files matching *.cs in the current directory, or in its subdirectories, recursively.

If you're not running a shell that supports ** but your grep supports --include, you can do a recursive grep and tell grep to only consider files matching certain patterns. Note the quotes around the file name pattern: it's interpreted by grep, not by the shell.

grep -rn --include='*.cs' GetTypes .

With only portable tools (some systems don't have grep -r at all), use find for the directory traversal part, and grep for the text search part.

find . -name '*.cs' -exec grep -n GetTypes {} +
  • To temporary set the globstar option for a current Bash 4+ shell, use: shopt -s globstar. – tjanez Sep 21 '17 at 13:35
8

You should check out the billiant little grep/find replacement known as ack. It is specifically setup for searching through directories of source code files.

Your command would look like this:

ack --csharp GetTypes
4

If you use GNU grep, you can specify which files to include in a recursive directory traversal:

grep --include '*.cs' -rn GetTypes .

(where the last period denotes the current working directory as root of the traversal)

4

I'm using a combination of find and grep:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

For find, you can replace . by a directory and remove -name if you want to look in every file.

For grep, -bn will print the position and the line number and --color will help your eyes by highlighting what you are looking for.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.