Suchen Sie unter Linux nach einem Textmuster

20

Ich bin ein Linux-Neuling. Ich muss in allen * .java-Dateien unter / home / user1 / (einschließlich der Unterordner) nach einer Zeichenfolge "teststring" suchen. Wie kann ich es unter Linux per Shell-Befehl tun.

Darth Vader
quelle
Über die Befehlszeile
RobotHumans
Eine schnelle Suche ergab diese Frage: superuser.com/questions/208271/… nicht genau das, wonach Sie suchen, aber anstelle von exec cp könnten Sie cat / grep was auch immer
RobotHumans
Ich kann die Datei mit der Erweiterung find / home / user1 -name * .java auflisten.
Darthvader

Antworten:

23

Am einfachsten ist es, die Funktionen von GNU grep zu verwenden:

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

Wenn Sie jemals auf einer anderen Unix-Variante ohne GNU grep arbeiten, haben Sie folgende Möglichkeit:

find /home/user1 -name '*.java' -exec grep teststring {} +
Gilles 'SO - hör auf böse zu sein'
quelle
Nizza
1
Wenn Sie das aktuelle Verzeichnis und alle Dateien suchen, ist esgrep -r teststring .
Chris Moschini
4

mit ack tippst du einfach:cd /home/user01 && ack --java teststring

Benoit
quelle
1
oderack --java teststring /home/user01
Andy Lester
4

Dafür ist ack aka ack-grep die Killer-App in meinem Kopf;)

Sie können ack some_string /in/path_yfinden some_string in path_y Oder einfacher ack some_other_stringzu finden some_other_sting in aktuellem Verzeichnis.

zzeroo
quelle
2

Fand es. Es zu posten, da es jemandem helfen könnte.

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

Bitte korrigieren Sie, ob es einen besseren Weg gibt.

Darth Vader
quelle
3
Im Allgemeinen sollten Sie verwenden -print0und -0beim Anschließen von Leitungen findin xargsrichtig die Arbeit mit Dateien , die Leerzeichen oder Zeilenumbrüche in ihren Namen haben:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
Pausierten bis auf weiteres.
0
grep -irl teststring *java
Unni
quelle