Wie verwende ich grep, um das aktuelle Verzeichnis nach allen Dateien zu durchsuchen, die die Zeichenfolge "Hallo" enthalten, und nur .h- und .cc-Dateien anzuzeigen?
138
grep -r --include=*.{cc,h} "hello" .
Dies lautet: Suchen Sie rekursiv (auch in allen Unterverzeichnissen) nach allen .cc ODER .h-Dateien, die in diesem .
(aktuellen) Verzeichnis "Hallo" enthalten
grep -si "hello" --include=*.{cc,h} ./* ./.*
(durchsucht auch versteckte Dateien). Hier ist eine generische Version, um in allen / versteckten Dateien nach einer Zeichenfolge zu suchen :grep -s "hello" * .*
. Vielleicht am allgemeinsten nützlich (und am einfachsten), durchsucht dies alle nicht versteckten Dateien nach "Hallo":grep -si "hello" ./*
Dank dieses Beitrags: askubuntu.com/a/777456grep -r --include=*.{java,py} "hello" .
Sie können Platzhalter übergeben, anstatt Dateinamen anzugeben oder stdin zu verwenden.
quelle
-R
funktioniert leider nicht. Es erweitert das*
vor dem rekursiven Gehen.$ grep -R hello *
# finden aus allen Wörtern enthalten Hallo (einschließlich Unterverzeichnis)find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.Überprüfen Sie die Handbuchseiten auf
find
undxargs
für Details.quelle
-print0
nach dem haben,'*.cc'
da Sie sonst keine Aktion für diesen Teil der Suche haben. Oder Sie müssen dort Klammern einfügen :find . \( -name '*.cc' -or -name '*.h' \) -print0
.find -exec +
Syntax anstelle von xargs verwenden-exec grep "hello" {} +
wobei das Klammerpaar die Dateinamen darstellt. Guter Vorschlag.So rekursiv im aktuellen Verzeichnis suchen:
quelle
Wenn Sie eine rekursive Suche benötigen, haben Sie verschiedene Möglichkeiten. Sie sollten überlegen
ack
.Andernfalls, wenn Sie GNU haben
find
undxargs
:Durch die Verwendung von wird
/dev/null
sichergestellt, dass Dateinamen gedruckt werden. Das-print0
und-0
befasst sich mit Dateinamen, die Leerzeichen enthalten (Zeilenumbrüche usw.).Wenn Sie keine störenden Namen haben (mit Leerzeichen usw.), können Sie Folgendes verwenden:
Dies könnte einige Namen aufgreifen, die Sie nicht beabsichtigt haben, da die Musterübereinstimmung unschärfer (aber einfacher) ist, aber ansonsten funktioniert. Und es funktioniert mit Nicht-GNU-Versionen von
find
undxargs
.quelle
find ... -exec grep "hello" {} +
Wenn ich Ihre Frage sorgfältig gelesen habe, fragen Sie nach "grep, um das aktuelle Verzeichnis nach allen Dateien zu durchsuchen, die die Zeichenfolge" Hallo "enthalten und nur .h- und .cc-Dateien anzeigen". Um Ihre genauen Anforderungen hier zu erfüllen, ist mein Beitrag:
Dies zeigt die Dateinamen an:
... und dies zeigt die Dateinamen und Inhalte an:
quelle
Möglicherweise möchten Sie
shopt -s nullglob
Fehlermeldungen vermeiden, wenn keine .h- oder keine .cc-Dateien vorhanden sind.quelle
Der einfachste Weg: grep -Ril "Dein Text" /
quelle