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.


Ü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 {} +


1
Wenn Sie das aktuelle Verzeichnis und alle Dateien suchen, ist esgrep -r teststring .
Chris Moschini


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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.