Linux: Ein bestimmtes Wort in Dateien finden
Das Problem:
Jemand suicht auf seinem Linux-System einige Dateien, die ein bestimmtes Wort enthalten. Es geht also um die Suche nach einem Wort in verschiedenen Dateien auf dem System – nicht um Dateinamen.
Die Lösung:
Da kann mit Bordmitteln gearbeitet werden. Mit grep kommt man da ziemlich schnell ans Ziel:
grep -nrw ‚/Dateipfad/‘ -e „Suchbegriff“
Zur Erklärung:
Was macht „grep“? Hier die Erklärung aus der Ubuntu Manpage:
BESCHREIBUNG
grep sucht in den angegebenen DATEIen (oder der Standardeingabe, wenn keine Dateien oder ein einzelner Trenn-/Bindestrich (-) als Dateiname angegeben wurde) nach Zeilen, die auf das MUSTER passen. Per Voreinstellung gibt grep die passenden Zeilen aus.
Zu den Parametern:
Ich verwende ’nrw‘, weil ich mir als Eselsbrücke das Bundesland merke 🙂
-n gibt die Zeilennummer an
-r (oder auch -R) rekursive Sucht (alle Unterordner werden mit durchsucht)
-w es muss das ganze Wort gefunden werden
-s suppress – unterdrückt alle Fehlermeldungen für gescheiterte Dateizugriffe, z:B. wegen fehlender Berechtigungen
Das kann die Ausgabe eventuell sehr viel übersichtlicher machen.
Mit den Optionen ‚-include‘ und ‚-exclude‘ kann man die Suche dann noch verfeinern.
Beispiel:
Ich suche nur *.txt und *.sh Dateien, in denen sich der Autor ‚Bikerpete‘ in den Kommentaren verewigt hat:
grep -include=\*.{txt,sh} -nrw /scripts/ -e „Bikerpete“
Jetzt finde ich im Verzeichnis /scripts alle .txt und .sh files mit dem gesuchten Muster. Sind dann z.B. .h oder .doc Dateien vorhanden, werden diese bei der Ausgabe ignoriert.
Weitere Optionen findet man, wenn man sich die Manpages mit ‚man grep‘ anzeigen läßt.
Quelle: Stack Overflow