Wie kann ich unter Solaris rekursives grep ausführen?
Als ich es versuchte, erhielt ich folgende Fehlermeldung:
-r: invalid option.
Wie kann ich unter Solaris rekursives grep ausführen?
Als ich es versuchte, erhielt ich folgende Fehlermeldung:
-r: invalid option.
Antworten:
Rekursives grep unter Solaris:
find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
Die Option -r für grep funktioniert nur mit gnu grep. Lösungen mit xargs sind gut, verursachen aber einige Probleme - find | xargs grep bricht bei Dateinamen mit Leerzeichen ab und außerdem ist xargs auch ein Gnu-Tool, sodass es möglicherweise nicht installiert ist.
Soweit ich weiß, ist der richtige Weg, dies unter Solaris zu tun:
find . -type f -exec grep ... {} +
Beachten Sie auch, dass solaris (naja, unix) grep (zum Beispiel) keine Option -E hat, und Sie sollten dafür verwenden egrep
.
Wenn du Glück hast, hast du auch gnu grep installiert. Es wird dann " ggrep " genannt.
ggrep befindet sich normalerweise in, /usr/sfw/bin/ggrep
wenn es installiert ist. Verwenden Sie die -H -R -I
Flags: -H
um den Dateinamen anzuzeigen, -R
für die rekursive Suche, -I
um Binärdateien zu ignorieren.
Beispiel: Alle Zeilen in allen Dateien mit Ausnahme von Binärdateien aus diesem Verzeichnis einschließlich aller Unterverzeichnisse mit dem Wort "excel" anzeigen
/usr/sfw/bin/ggrep -H -R -I "excel" *
find . -type f -exec grep hello {} /dev/null \;
Dies funktioniert auch für Dateinamen mit Leerzeichen. Warum / dev / null? Da jede grep-Instanz jeweils eine einzelne Datei überprüft und daher den Dateinamen nicht druckt, wenn eine Übereinstimmung gefunden wird. Das ist in Ordnung, wenn Sie wirklich nur eine einzelne Datei abrufen, aber es hilft nichts, wenn grep wiederholt von find aufgerufen wird. Das zusätzliche / dev / null dient als zusätzliche Dummy-Datei für die Suche, sodass grep dem aktuellen Dateinamen voranstellt, wenn die übereinstimmende Zeile gedruckt wird.