Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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?

share|improve this question
    
add comment

4 Answers

up vote 5 down vote accepted

If your shell is bash ≥4, put setopt 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 {} +
share|improve this answer
add comment

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
share|improve this answer
add comment

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)

share|improve this answer
add comment

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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