25

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.

softwarematter
  • 3,949
  • 21
  • 63
  • 88
  • There have been several questions regarding regex searching files in subdirectories from the command-line – RobotHumans Nov 28 '10 at 15:12
  • a quick search turned up this question: http://superuser.com/questions/208271/find-document-files-and-copy-them-to-another-directory not exactly what you are looking for, but instead of exec cp you could cat/grep whatever – RobotHumans 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? – softwarematter Nov 28 '10 at 15:23
  • [find . -type f -print0 | xargs -0 grep -l "some string"](https://superuser.com/questions/614526/finding-files-which-contain-a-certain-string-using-find-1-and-grep-1) – Nick Dong Dec 08 '22 at 07:12

5 Answers5

27

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 {} +
Gilles 'SO- stop being evil'
  • 69,786
  • 21
  • 137
  • 178
5

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

Benoit
  • 6,993
  • 4
  • 23
  • 31
5

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.

zzeroo
  • 528
  • 6
  • 15
3

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.

softwarematter
  • 3,949
  • 21
  • 63
  • 88
  • 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
1
grep -irl teststring *java
Unni
  • 215
  • 1
  • 5