it-swarm.com.de

Wie verwende ich grep, um das aktuelle Verzeichnis nach allen Dateien zu durchsuchen, die die Zeichenfolge "Hallo" haben, aber nur .h- und .cc-Dateien anzeigen?

Wie verwende ich grep, um im aktuellen Verzeichnis nach allen Dateien zu suchen, die die Zeichenfolge "Hallo" enthalten, und um nur .h- und .cc-Dateien anzuzeigen?

125
stackoverflow
grep -r --include=*.{cc,h} "hello" .

Dies lautet: Suche rekursiv (auch in allen Unterverzeichnissen) nach allen .cc OR .h-Dateien, die "Hallo" an dieser Stelle enthalten . (Aktuelles Verzeichnis

Von einer anderen Stapelüberlauf-Frage

149
stackoverflow

Sie können Platzhalter eingeben, anstatt Dateinamen anzugeben oder stdin zu verwenden.

grep hello *.h *.cc
45
Donald Miner

find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello".

Überprüfen Sie die Handbuchseiten für find und xargs für Details.

19
Noufal Ibrahim

Wenn ich Ihre Frage sorgfältig lese, fragen Sie nach "grep", um im aktuellen Verzeichnis nach allen Dateien zu suchen, die die Zeichenfolge enthalten "Hallo" und zeige nur .h und .cc Dateien an ". Um Ihre genauen Anforderungen hier zu erfüllen, ist mein Beitrag:

Dies zeigt die Dateinamen an:

grep -lR hello * | egrep '(cc|h)$'

... und dies zeigt die Dateinamen und Inhalte an:

grep hello `grep -lR hello * | egrep '(cc|h)$'`
5
Jack

So suchen Sie rekursiv im aktuellen Verzeichnis:

grep -r 'myString' .
5
AB Abhi

Wenn Sie eine rekursive Suche benötigen, haben Sie verschiedene Möglichkeiten. Sie sollten ack berücksichtigen.

Andernfalls, wenn Sie GNU find und xargs haben:

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

Die Verwendung von /dev/null stellt sicher, dass die Dateinamen gedruckt werden. das -print0 und -0 behandelt Dateinamen mit Leerzeichen (Zeilenumbrüche usw.).

Wenn Sie keine abweichenden Namen (mit Leerzeichen usw.) haben, können Sie Folgendes verwenden:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

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 und xargs.

4
grep -l hello **/*.{h,cc}

Sie möchten vielleicht shopt -s nullglob, um Fehlermeldungen zu vermeiden, wenn keine .h- oder .cc-Dateien vorhanden sind.

2
glenn jackman