1353 Stimmen

Wie kann ich rekursiv grep, aber nur in Dateien mit bestimmten Erweiterungen?

Ich arbeite an einem Skript, um bestimmte Verzeichnisse mit grep zu durchsuchen:

{ grep -r -i CP_Image ~/path1/;
grep -r -i CP_Image ~/path2/;
grep -r -i CP_Image ~/path3/;
grep -r -i CP_Image ~/path4/;
grep -r -i CP_Image ~/path5/; }
| mailx -s GREP email@domain.example

Wie kann ich die Ergebnisse nur auf die Erweiterungen .h und .cpp beschränken?

1831voto

Nelson Punkte 46593

Verwenden Sie einfach den --include-Parameter, so:

grep -inr --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP email@domain.example

Das sollte das gewünschte Ergebnis erzielen.

Um die Erklärung aus der Antwort von HoldOffHunger zu übernehmen:

  • grep: Befehl

  • -r: rekursiv

  • -i: Groß-/Kleinschreibung ignorieren

  • -n: jede Ausgabzeile wird durch ihre relative Zeilennummer in der Datei vorangestellt

  • --include \*.cpp: alle *.cpp: C++-Dateien (mit \ entkommen, nur für den Fall, dass Sie ein Verzeichnis mit Sternchen in den Dateinamen haben)

  • ./: Beginnen Sie im aktuellen Verzeichnis.

434voto

HoldOffHunger Punkte 14903

Einige dieser Antworten schienen zu syntaxlastig zu sein oder verursachten Probleme auf meinem Debian Server. Dies hat bei mir einwandfrei funktioniert:

grep -r --include=\*.txt 'searchterm' ./

...oder die case-insensitive Version...

grep -r -i --include=\*.txt 'searchterm' ./
  • grep: Befehl

  • -r: rekursiv

  • -i: Groß-/Kleinschreibung ignorieren

  • --include: alle *.txt: Textdateien (mit \ maskieren, nur für den Fall, dass Sie ein Verzeichnis mit Sternchen in den Dateinamen haben)

  • 'searchterm': Was gesucht wird

  • ./: Beginne im aktuellen Verzeichnis.

Quelle: PHP Revolution: Wie man Dateien in Linux durchsucht, aber nur bestimmte Dateierweiterungen?

89voto

Yuri Malov Punkte 1127
grep -rnw "etwas zu greifen" --include=*.{module,inc,php,js,css,html,htm} ./

62voto

Amir Afghani Punkte 36713

Verwenden:

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print

36voto

Sam B Punkte 26515

Es gibt keine -r Option auf HP und Sun Servern, aber diese Methode hat auf meinem HP Server funktioniert:

find . -name "*.c" | xargs grep -i "mein großartiger Text"

-i steht für eine Groß-/Kleinschreibung ignorierende Suche nach Zeichenfolgen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X