Drucken von übereinstimmenden Zeilen beim Greping aller Dateien in einem Verzeichnis

596
John Kube

Ich suche in Java-Dateien nach Vorkommen eines Ausdrucks:

finden . -name '* .java' | xargs grep -l 'string'

Wie ändere ich diesen Befehl, um alle Zeilen, die eine Übereinstimmung enthalten, in die Shell zu drucken?

1
Erwägen Sie die Verwendung von `ack`: http://betterthangrep.com/ Dennis Williamson vor 14 Jahren 0

4 Antworten auf die Frage

2
Steve McKay
find . -name '*.java' | xargs grep 'string' find . -name '*.java' | xargs grep -H 'string' # if you want filenames too 
Oder um Leerzeichen in Dateinamen zu behandeln: find. -name '* .java' -print0 | xargs -0 grep 'string' CoverosGene vor 13 Jahren 0
0
user31894
grep -HR "string" *.java 
0
Andy Lester

Versuchen Sie es mit ack, erhältlich bei betterthangrep.com

ack string --java 
0
Ole Tange

Wenn Ihre Dateinamen Leerzeichen enthalten, sollten Sie sich GNU Parallel unter www.gnu.org/software/parallel/ ansehen.

find . -name '*.java' | parallel grep 'string' 

Abhängig von Ihrem System kann dies schneller als der sequenzielle Betrieb erfolgen, da mehrere CPUs verwendet werden können. Oft ist die Geschwindigkeit der Platte jedoch der limitierende Faktor.

Sehen Sie sich das Einführungsvideo zu GNU Parallel an: http://www.youtube.com/watch?v=OpaiGYxkSuQ