Wie verwende ich grep, um eine Textzeichenfolge in Dateien in Unterordnern eines übergeordneten Ordners ohne den Schalter -r zu finden?

Wie verwende ich grep, um eine Textzeichenfolge in Dateien in Unterordnern eines übergeordneten Ordners ohne den Schalter -r zu finden?

Ich verwende Solaris 10 und habe zwei grepVersionen, eine in /usr/binund 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 -roder -RSchalter, 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/nullwird sichergestellt, dass grepimmer 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 -print0Prädikat und eine -0Option 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 -reine 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 grepunterstützt das -RFlag.

Antwort3

Verwenden Sie einfach ggrep, das unter Solaris in einem /usr/sfw/bin/ggrepsolchen 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.

verwandte Informationen