In Windows hätte ich nach einem Wort in einem Ordner gesucht. Ebenso möchte ich wissen, ob ein bestimmtes Wort in einem Verzeichnis vorkommt, das viele Unterverzeichnisse und Dateien enthält. Meine Suche nach grep-Syntax zeigt, dass ich den Dateinamen angeben muss, dh grep string filename
.
Jetzt kenne ich den Dateinamen nicht. Was mache ich also? Ein Freund schlug vor, dies zu tun grep -nr string
, aber ich weiß nicht, was dies bedeutet, und ich habe keine Ergebnisse damit erzielt (es gibt keine Antwort, bis ich a herausgebe ctrl + c).
*
? Dies führt entweder zu einer Shell-Platzhaltererweiterung (wenn Dateinamen vorhanden sind, die mit dem Platzhaltermuster übereinstimmen), oder grep verwendet sie als 0-oder mehr-Wiederholungsoperator für das vorhergehende Zeichen*
.grep -nr MobileAppSer* .
1. Angenommen , wir haben 3 - Dateien im aktuellen Verzeichnis AnpassungsMobileAppSer*
Wildcard Muster: NamenMobileAppServlet.java
,MobileAppServlet.class
,MobileAppServlet.txt
. Danngrep
wird wie folgt aufgerufen :grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
. Dies bedeutet, dass in den Dateien MobileAppServlet.java, MobileAppServlet.txt und an anderer Stelle im aktuellen Verzeichnis nach dem Text "MobileAppServlet.class" gesucht wird - was der Benutzer hier sicherlich nicht möchte.MobileAppSer*
Platzhaltermuster entsprechen,grep
wird das Argument unverändert empfangenMobileAppSer*
und somit als Suche nach dem Text "MobileAppSe" gefolgt von 0 oder mehr Vorkommen von "r" verwendet Versuchen Sie, die Texte "MobileAppSe", "MobileAppSer", "MobileAppSerr", "MobileAppSerrr" usw. im Dateiinhalt des aktuellen Verzeichnisses zu finden - auch nicht das, was der Benutzer möchte.Zusätzliche Hinweise: Dies entspricht der Syntax,
grep [options] string filename
da in Unix-ähnlichen Systemen ein Verzeichnis eine Art Datei ist (es gibt einen Begriff "reguläre Datei", der sich speziell auf Entitäten bezieht, die in Windows nur "Dateien" genannt werden).grep -nr string
Liest den zu durchsuchenden Inhalt von der Standardeingabe. Deshalb wartet er dort nur auf Eingaben von Ihnen und hört damit auf, wenn Sie ^ C drücken (dies würde auch bei ^ D aufhören, was die Tastenkombination für das Ende von ist -Datei).quelle
grep -inr "my word" .
-r
für grep bedeutet rekursives Suchen in Unterverzeichnissen und-n
bedeutet, dass jeder Ausgabezeile die entsprechende Zeilennummer der Datei vorangestellt wird, die diese Zeile enthält.man grep
beschreibt all dies und noch viel mehr.GREP : Globaler Ausdruck / Parser / Prozessor / Programm für reguläre Ausdrücke.
Hiermit können Sie das aktuelle Verzeichnis durchsuchen.
Sie können -R für "rekursiv" angeben. Dies bedeutet, dass das Programm in allen Unterordnern und ihren Unterordnern sowie in den Unterordnern ihres Unterordners usw. sucht.
-n
druckt die Zeilennummer, wo sie in der Datei übereinstimmt.-i
sucht ohne Berücksichtigung der Groß- und Kleinschreibung (Groß- / Kleinbuchstaben).quelle
führt eine RECURSIVE-Suche (dh das Verzeichnis und alle seine Unterverzeichnisse) nach der Suchzeichenfolge durch. (wie von usta richtig beantwortet).
Der Grund, warum Sie mit dem Vorschlag Ihres Freundes keine Antwort erhalten haben:
liegt daran, dass kein Verzeichnis angegeben wurde. Wenn Sie sich in dem Verzeichnis befinden, in dem Sie suchen möchten, müssen Sie Folgendes tun:
Es ist wichtig, das '.' Zeichen, da dies grep anweist, DIESES Verzeichnis zu durchsuchen.
quelle
Es gibt auch:
aber das könnte ein bisschen viel für einen Anfänger sein.
find
ist ein Allzweck-Verzeichnis-Walker / Lister,-type f
bedeutet "Suche nach einfachen Dateien anstelle von Verzeichnissen und Named Pipes und was hast du?",-print0
bedeutet "Drucke sie auf der Standardausgabe mit Nullzeichen als Trennzeichen". Die Ausgabe vonfind
wird an gesendetxargs -0
und erfasst die Standardeingabe in Blöcken (um Einschränkungen der Befehlszeilenlänge zu vermeiden), wobei Nullzeichen als Datensatztrennzeichen (anstelle der Standard-Zeilenumbruch) verwendet werden. Dies giltgrep -li word
für jeden Dateisatz . Auf dergrep
,-l
bedeutet „Liste der Dateien, die“ und-i
bedeutet „Groß- und Kleinschreibung“; Normalerweise können Sie einzelne Zeichenoptionen kombinieren, sodass Sie-li
häufiger als sehen-l -i
.Wenn Sie nicht verwenden
-print0
und-0
dann auf Probleme mit Dateinamen stoßen, die Leerzeichen enthalten, ist die Verwendung dieser Leerzeichen eine gute Angewohnheit.quelle
man find
in der Befehlszeile, welche Optionen Siefind
unterstützen.Warum nicht eine rekursive Suche durchführen, um alle Instanzen in Unterverzeichnissen zu finden:
Das funktioniert wie ein Zauber.
quelle
grep -r "yourstring" *
Findet "yourstring" in allen Dateien und OrdnernWenn Sie nun gleichzeitig 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
grep -rE "yourstring|yourotherstring|$" *
sucht nach Listenorten, an denenyourstring
oderyourotherstring
übereinstimmtquelle
Eine weitere Option, die ich gerne benutze:
-type f gibt nur Dateien und keine Ordner zurück
-exec und {} führen das grep für die Dateien aus, die bei der Suche gefunden wurden (die genaue Syntax lautet "-exec command {}").
quelle
-R folgt auch Symlinks, wenn -r dies nicht tut.
quelle
Die Antwort, die Sie ausgewählt haben, ist in Ordnung und funktioniert, aber es ist nicht der richtige Weg, weil:
Dies durchsucht tatsächlich die Zeichenfolge
"yourStrin"
und"g"
0 oder viele Male.Der richtige Weg, dies zu tun, ist:
Dieser Befehl durchsucht die Zeichenfolge mit einem beliebigen Zeichen vor und nach dem aktuellen Ordner.
quelle
grep -nr yourString
funktioniert auch, da es für die nackten siehtyourString
überall in der Linie (oder zumindest tut es auf meinem System, OSX Lion)Ähnlich wie bei der Antwort von @eLRuLL können Sie eine Suche, die Wortgrenzen berücksichtigt, einfacher angeben, indem Sie die folgende
-w
Option verwenden:quelle
Führen Sie (Terminal) den folgenden Befehl im Verzeichnis aus. Es wird auch rekursiv in Unterverzeichnissen überprüft.
quelle
Das folgende Beispiel sucht rekursiv nach
your search string
den Dateien*.xml
und*.js
, die sich irgendwo in den Ordnern befindenpath1
,path2
undpath3
.Sie können also in einer Teilmenge der Dateien nach vielen Verzeichnissen suchen und nur die Pfade am Ende angeben.
quelle
Verwenden Sie nicht grep. Laden Sie Silver Searcher oder ripgrep herunter . Sie sind beide hervorragend und viel schneller als grep oder ack mit unzähligen Optionen.
quelle