Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm a linux newbie. I need to search for a string "teststring" in all *.java files coming under /home/user1/ (including subfolders). How can I do it in linux via shell command.

share|improve this question
    
There have been several questions regarding regex searching files in subdirectories from the command-line –  hbdgaf Nov 28 '10 at 15:12
    
a quick search turned up this question: superuser.com/questions/208271/… not exactly what you are looking for, but instead of exec cp you could cat/grep whatever –  hbdgaf Nov 28 '10 at 15:16
    
I can list the file having the extension with find /home/user1 -name *.java How to use grep on that? –  darthvader Nov 28 '10 at 15:23
    
@aking1012 thanks for guiding. –  darthvader Nov 28 '10 at 15:28

5 Answers 5

up vote 12 down vote accepted

The easiest way is to use GNU grep's features:

grep -r --include '*.java' teststring /home/user1

If you're ever on another unix variant that doesn't have GNU grep, here's a portable way:

find /home/user1 -name '*.java' -exec grep teststring {} +
share|improve this answer
    
nice didn't know about this grep feature –  hbdgaf Nov 28 '10 at 15:52
    
If you're searching the current dir and all files it's grep -r teststring . –  Chris Moschini Jun 25 at 17:16

using ack you just type: cd /home/user01 && ack --java teststring

share|improve this answer
    
or ack --java teststring /home/user01 –  Andy Lester Dec 1 '10 at 3:43

For this ack aka ack-grep its the killer app in my mind ;)

You can ack some_string /in/path_y to find some_string in path_y Or simpler ack some_other_string to find some_other_sting in current dir.

share|improve this answer

Found it. Posting it as it might help someone.

find /home/user01 -name *.java | xargs grep "teststring"

Please correct if there is any better way.

share|improve this answer
3  
Generally, you should use -print0 and -0 when piping find into xargs to work properly with files that may have spaces or newlines in their names: find /home/user01 -name *.java -print0 | xargs -0 grep "teststring" –  Dennis Williamson Nov 28 '10 at 15:38
grep -irl teststring *java
share|improve this answer

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.