
Ich verwende Solaris 10 und habe zwei grep
Versionen, eine in /usr/bin
und eine in /usr/xpg4/bin
. Ich habe nach einer Antwort gesucht, wie man mit nach Text in Dateien in Unterordnern eines übergeordneten Verzeichnisses sucht grep
. In allen Antworten geht es um -r
oder -R
Schalter, die bei meiner Version von nicht verfügbar sind grep
.
Antwort1
Die Standardsyntax (POSIX) lautet:
find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +
(damit /dev/null
wird sichergestellt, dass grep
immer ein Dateiname gedruckt wird). Das funktioniert auf allen POSIX-Systemen, einschließlich Solaris. Die einzigen bekannten Systeme nach den 90er-Jahren, bei denen das nachweislich nicht funktioniert, sind alte (mittlerweile sehr alte) GNU-Systeme.
GNU führte ursprünglich stattdessen ein -print0
Prädikat und eine -0
Option ein:xargs
find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null
Es gibt mittlerweile einige andere Implementierungen, die dies unterstützen, aber nicht Solaris.
Theoretisch möchten Sie oben -r
eine Option hinzufügen, um die Ausführung zu vermeiden grep
, wenn keine Datei vorhanden ist, aber das ist nicht sotragbarund in diesem speziellen Fall macht es keinen funktionalen Unterschied
Antwort2
Verwendung von GNU grep
(falls installiert):
ggrep -A3 -B23 'word' -R /log/
Dadurch wird für alle Dateien im Ordner geprüft, ob der reguläre Ausdruck word
übereinstimmt, und die Ausgabe wird zusammen mit dem Dateipfad angezeigt.
GNU grep
unterstützt das -R
Flag.
Antwort3
Verwenden Sie einfach ggrep, das unter Solaris in einem /usr/sfw/bin/ggrep
solchen Pfad vorhanden ist:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
Es sucht nach Ihrem Suchbegriff in einer Gruppe von Dateinamen, die mit einem bestimmten Wort beginnen.