Suchen Sie im aktuellen Verzeichnis rekursiv nach einer Zeichenfolge

15

Ich möchte alle Dateien in dem Verzeichnis, in dem ich mich befinde, nach einer bestimmten Zeichenfolge rekursiv durchsuchen.

Ich habe es versucht

grep -r -i my_string

und ich habe es in einem Testordner mit zwei winzigen Dateien versucht, aber die Zeichenfolge wurde nicht gefunden.

Gibt es auch eine spezielle Möglichkeit, "enthält" zu definieren, anstatt das ganze Wort zu finden?

David
quelle
3
Versuchen Sie grep -r -o -i "your_string" *(mit "Anführungszeichen").
Pl1nk
Ich erhalte ein paar Meldungen, denen die Erlaubnis verweigert wurde. Ignoriert sie nur diese Dateien, setzt aber die Überprüfung des Rests fort?
David
Richtig, diese Dateien werden ignoriert.
2.

Antworten:

26

Suchen Sie nach einem Dateinamen oder einem Wort in einer Datei? grep sucht in den Dateien, und das scheint genau das zu sein, was Sie wollen.

grep verwendet reguläre Ausdrücke - genau dafür steht der "re" -Teil. Daher werden die normalen Bash-Platzhalter nicht verwendet. das heißt, es abc*würde keine Wörter finden, die mit abc beginnen, es würde Wörter finden, die mit ab beginnen, dann folgen null oder mehr c. Aber ja, wenn Sie ihm einfach ein Muster geben, findet er es überall, ohne Kenntnis ganzer Wörter. Wenn Sie ganze Wörter finden möchten, müssen Sie einen regulären Ausdruck erstellen, um dies zu verdeutlichen.

Wie bei den meisten Befehlen müssen Sie jedoch die Dateinamen am Ende des Befehls einfügen, damit Ihr Beispiel nur dort bleibt und auf den Dateinamen wartet.

Wie @plink sagte, benutze

grep -r -o -i "your_string" *

(oder *.*oder eine andere Dateispezifikation). Die Fehler können ignoriert werden. Wenn Sie viele Fehler erhalten, können Sie 2>/dev/nullan das Ende anhängen , wodurch stderr auf ein Null-Gerät umgeleitet wird.

Marty Fried
quelle
6
Für Neugierige: -r bedeutet rekursiv (dh es sucht im aktuellen Ordner und in ALLEN Ordnern im aktuellen Ordner UND in allen Ordnern in diesen Ordnern ..... bis unendlich), -o bedeutet, dass die gesamte Zeile nicht angezeigt wird, und -i ist Groß- und Kleinschreibung ignorieren.
BKSpurgeon
@johnsnails Das Backtick ist nicht notwendig. Es ist wahrscheinlicher, dass beim Posten als Inline-Codeblock ein Formatierungsfehler in Stack Exchange auftritt.
tom_mai78101
Ja das macht Sinn.
Johnsnails