it-swarm.com.de

Wie kann ich grep verwenden, um ein Wort in einem Ordner zu finden?

Unter Windows hätte ich nach einem Wort in einem Ordner gesucht. Ebenso möchte ich wissen, ob ein bestimmtes Wort in einem Verzeichnis mit vielen Unterverzeichnissen und Dateien vorkommt. Meine Suche nach Grep-Syntax zeigt, dass ich den Dateinamen angeben muss, d. H. grep string filename.

Jetzt kenne ich den Dateinamen nicht, also was mache ich? Ein Freund schlug vor, grep -nr string zu machen, aber ich weiß nicht, was dies bedeutet, und ich habe keine Ergebnisse damit erzielt (es erfolgt keine Antwort, bis ich a ausstelle ctrl + c).

467
kiki
grep -nr 'yourString*' .

Der Punkt am Ende durchsucht das aktuelle Verzeichnis. Bedeutung für jeden Parameter:

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' . (würde MobileAppServlet.Java oder MobileAppServlet.class oder MobileAppServlet.txt finden; 'MobileAppASer*.*' ist eine andere Möglichkeit, das gleiche zu tun.)

Um weitere Parameter zu überprüfen, verwenden Sie den Befehl man grep command.

671
Manish Ranjan

grep -nr string my_directory

Zusätzliche Hinweise: Dies erfüllt die Syntax grep [options] string filename, da ein Verzeichnis in Unix-ähnlichen Systemen eine Art Datei ist (es gibt den Begriff "reguläre Datei", um speziell auf Entitäten zu verweisen, die in Windows nur "Dateien" genannt werden).

grep -nr string liest den zu durchsuchenden Inhalt aus der Standardeingabe. Deshalb wartet er dort nur auf Eingaben von Ihnen und hört auf, dies zu tun, wenn Sie auf ^ C drücken (er würde auch auf ^ D enden. of-file).

103
usta

GREP: Globaler Ausdruck regulärer Ausdrücke/Parser/Prozessor/Programm.
Sie können damit das aktuelle Verzeichnis durchsuchen. 
Sie können -R für "rekursiv" angeben. Dies bedeutet, dass das Programm in allen Unterordnern und ihren Unterordnern und deren Unterordnern usw. sucht.

grep -R "your Word" .

-n druckt die Zeilennummer, wo sie in der Datei übereinstimmt.
-i sucht nach Groß-/Kleinschreibung (Groß-/Kleinschreibung).

grep -inR "your regex pattern" .
54
Stefan Steiger

Es gibt auch:

find directory_name -type f -print0 | xargs -0 grep -li Word

aber das könnte für Anfänger etwas zu viel sein.

find ist ein Allzweck-Verzeichnis walker/lister. -type f bedeutet "nach einfachen Dateien und nicht nach Verzeichnissen und Named Pipes suchen". -print0 bedeutet "sie in der Standardausgabe mit Nullzeichen als Trennzeichen ausgeben". Die Ausgabe von find wird an xargs -0 gesendet, und die Standardeingabe in Chunks (um die Begrenzung der Befehlszeilenlänge zu vermeiden) wird unter Verwendung von Nullzeichen als Datensatztrennzeichen (anstelle der standardmäßigen Zeilenvorschubzeile) verwendet. grep -li Word gilt für jeden Dateisatz. Auf grep bedeutet -l "liste die Dateien auf, die übereinstimmen" und -i bedeutet "Groß- und Kleinschreibung beachten"; Sie können normalerweise die Optionen für einzelne Zeichen kombinieren, sodass Sie -li häufiger als -l -i sehen.

Wenn Sie nicht -print0 und -0 verwenden, treten Probleme mit Dateinamen auf, die Leerzeichen enthalten. Daher ist die Verwendung dieser Namen eine gute Angewohnheit.

24
mu is too short
grep -nr search_string search_dir

führt eine RECURSIVE-Suche (dh das Verzeichnis und alle seine Unterverzeichnisse) nach search_string durch. (wie von usta richtig beantwortet).

Der Grund, warum Sie mit dem Vorschlag Ihres Freundes keine Antwort erhalten haben:

grep -nr string

liegt daran, dass kein Verzeichnis angegeben wurde. Wenn Sie sich in dem Verzeichnis befinden, in dem Sie die Suche durchführen möchten, müssen Sie Folgendes tun:

grep -nr string .

Es ist wichtig, das '.' Zeichen, da dies grep anweist, DIESES Verzeichnis zu durchsuchen.

22
Nico Huysamen

Warum nicht rekursiv suchen, um alle Instanzen in Unterverzeichnissen zu finden:

grep -r 'text' *

Das funktioniert wie ein Zauber.

4
Paxwell
  1. grep -r "yourstring" * Findet "yourstring" in allen Dateien und Ordnern 

Wenn Sie jetzt nach zwei verschiedenen Zeichenfolgen suchen möchten, können Sie immer die Option E verwenden und Wörter für die Suche hinzufügen. Beispiel nach der Pause

  1. grep -rE "yourstring|yourotherstring|$" * sucht nach Listenorten, an denen yourstring oder yourotherstring übereinstimmen
4
Nwaoga

Eine weitere Option, die ich gerne benutze:

find folder_name -type f -exec grep your_text  {} \;

-type f gibt nur Dateien und keine Ordner zurück

-exec und {} führt das grep für die Dateien aus, die in der Suche gefunden wurden (die genaue Syntax lautet "-exec command {}").

3
jfhfhf839

Die Antwort, die Sie ausgewählt haben, ist in Ordnung und funktioniert gut, aber es ist nicht der richtige Weg, dies zu tun, weil:

grep -nr yourString* .

Dies durchsucht den String "yourStrin" und "g" 0 oder mehrmals.

Der richtige Weg, dies zu tun, ist also:

grep -nr \w*yourString\w* .

Dieser Befehl durchsucht die Zeichenfolge mit einem beliebigen Zeichen vor und nach dem aktuellen Ordner.

1
eLRuLL

Ähnlich wie bei der Antwort, die von @eLRuLL veröffentlicht wurde, ist die Verwendung der Option -w eine einfachere Möglichkeit, eine Suche anzugeben, die die Word-Grenzen berücksichtigt.

grep -wnr "yourString" .
0
Mike Slinn
grep -R "string" /directory/

Früher war es grep -r, aber ich habe gerade bemerkt, dass es in meiner Version nicht mehr funktioniert.

grep --version
grep (GNU grep) 3.1
0
DimiDak

Verwenden Sie nicht grep. Silver Searcher oder ripgrep herunterladen. Sie sind beide hervorragend und viel schneller als grep oder ack mit vielen Optionen.

0
AAAfarmclub