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?
grep -r -o -i "your_string" *
(mit "Anführungszeichen").Antworten:
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
(oder
*.*
oder eine andere Dateispezifikation). Die Fehler können ignoriert werden. Wenn Sie viele Fehler erhalten, können Sie2>/dev/null
an das Ende anhängen , wodurch stderr auf ein Null-Gerät umgeleitet wird.quelle