Die rekursive Suche funktioniert unter Solaris nicht für grep

20

Auf unserem Solaris-Server grep -rfunktioniert das nicht, wie ich es gewohnt bin grep. Es scheint, dass egrepdas gleiche Verhalten hat.

Gibt es eine Möglichkeit grep, eine rekursive Suche durchzuführen , da ich keine Kontrolle über die Maschine habe ? Oder muss ich die Ausgabe von findin grepumleiten?

Eric Wilson
quelle
1
Welche Solaris-Version verwenden Sie?
Juli

Antworten:

4

Ich bin nicht mit Solaris vertraut, aber wenn Sie von GNU / Linux zu Solaris wechseln, werden Sie feststellen, dass sich die meisten Befehle etwas anders verhalten. Die GNU-Version der Unix-Tools verfügt über zusätzliche Funktionen, die in "proprietären" Unixen fehlen.

Sie können GNU grep (s) hier herunterladen, kompilieren und installieren.

Wenn Sie Root-Zugriff haben, können Sie configure --prefix = / usr / local ausführen, sodass die Dienstprogramme in / usr / local installiert werden

Wenn Sie keinen Root-Zugriff haben, können Sie configure --prefix = $ {HOME} ausführen, sodass die Dienstprogramme in Ihrem Home-Verzeichnis installiert werden

bsd
quelle
--prefix=${HOME}}/.localist wahrscheinlich ratsamer ... keine Notwendigkeit, das Home-Verzeichnis mit shareund libOrdner
überladen
1
Ein Mann ist
vollgestopft
Ohne Zweifel! Ehrlich gesagt, ich schütze mich vor dem Ruhetag, wenn ich sage: " shareDas muss ein Junk-Verzeichnis sein!" rm -rfDoh!
Jpaugh
31

Wenn Sie verwenden möchten, findist dies der schnellste Weg:

find . -type f -exec grep pattern {} +

Allerdings ist Gnu grep höchstwahrscheinlich bereits auf Ihrem Computer installiert.

Es ist Teil der Standardinstallation unter Solaris 11 in /usr/gnu/bin/grep. Dasselbe gilt für Solaris 10, in dem Sie es finden /usr/sfw/bin/ggrep. Bei älteren Versionen, könnte es von Sunfreeware oder anderen Repositories, Check installiert /usr/local/bin/grepund /opt/csw/bin/grepfür gemeinsame Standorte.

jlliagre
quelle
Sie können die -nameOption auch mit verwenden find.
Sleepyweasel
@sleepyweasel -namedurchsucht die Dateien nicht, sondern nur die Dateinamen, nach denen das OP nicht fragt.
Juli
6

Verwenden Sie stattdessen ggrep, wenn es installiert ist.

ZB Suche nach "mysearchstring" vom aktuellen Verzeichnis bis in alle Unterverzeichnisse ( -R) und zeige den Dateinamen und Pfad für Übereinstimmungen ( -H) und ignoriere Binärdateien ( -I). Vergessen Sie nicht *das Ende des Befehls.

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep befindet sich in /usr/sfw/bin Sie können es mit einem EXPORT-Befehl zu Ihrem Profil hinzufügen, sodass Sie es direkt über die Befehlszeile aufrufen können.

PATH=$PATH:/usr/sfw/bin
export PATH

Solaris-Version: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise

Underverse
quelle
1
Zumindest auf meinem System ggrepist GNU in der Tat grep. Vielen Dank!
Jpaugh
3

Laden Sie das eigenständige ackPerl-Skript von http://betterthangrep.com/ herunter , fügen Sie es in Ihr Skript ein $HOME/binund lernen Sie, es stattdessen zu verwenden. Ich finde es, wie angekündigt, für viele Zwecke in meiner täglichen Entwicklungsarbeit besser als grep.

alanc
quelle
3

Solaris grep hat keine -rOption.

Sie können folgenden Befehl verwenden.

find . -type f | xargs grep 'sometext'
Sachin Divekar
quelle
2
Sie brauchen keine "Kontrolle über das System", um GNU grep zu kompilieren und irgendwo in Ihrem Home-Verzeichnis zu installieren.
Keith Thompson
@KeithThompson danke, darauf hinzuweisen. Ich habe meine Antwort korrigiert.
Sachin Divekar
Dies ist sehr nützlich, um alle Dateien zu finden, die einem Namensmuster entsprechen, und Ergebnisse mit der Datei anzuzeigen. zB find /opt/ -name "*.sh" -type f | xargs grep "start"
Undervers
1

Ja, du brauchst das GNU grep. Persönlich vermisse ich das "-r" -Flag nicht, weil Sie dasselbe mit einer Kombination von findund tun können. grepDies erinnert jedoch daran, dass die Verfügbarkeit der GNU-Tools auf Ihrer Solaris-Box meiner Meinung nach die beste Vorgehensweise ist. Auf geht's:

Ich würde mich nicht darum kümmern, Quellcode von verschiedenen Stellen im Internet herunterzuladen und dann selbst zu erstellen. Das ist nicht nötig. Wenn Sie einfach möchten, dass Solaris über die typischen GNU-Tools verfügt, gehen Sie wie folgt vor:

Wenn Sie mit Solaris 10 arbeiten , sollten Sie die Solaris 10 Companion Disk erwerben. Früher wurde es von Sun vertrieben, heute lebt es hier . Persönlich würde ich es mir zur Gewohnheit machen, immer den Inhalt dieser Diskette oder zumindest die wichtigsten GNU-Teile zu installieren. Machen Sie es zu einem Teil Ihres JumpStart (oder was auch immer Sie verwenden) für neue Server in Ihrer Organisation!

Wenn Sie mit Solaris 11 arbeiten, ist das Leben viel einfacher. Die GNU-Tools werden normalerweise standardmäßig installiert, aber nicht alle werden in lokale Zonen übertragen. IFS, das Verpackungssystem unter Solaris 11, erleichtert Ihnen das Leben erheblich. Sie sollten also wirklich auf Solaris 11 umsteigen (viele andere Gründe). Die Liste der Pakete, die Sie immer für eine Zone zur Verfügung haben sollten, lautet wie folgt:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / diagnostic / top
pkg: // solaris / file / gnu-coreutils
pkg: // solaris / file / gnu-findutils
pkg: // solaris / text / gawk
pkg: // solaris / text / gnu-diffutils
pkg: // solaris / text / gnu-grep
pkg: // solaris / text / gnu-sed

und wenn Sie den Host für Entwicklungs- / Erstellungszwecke verwenden, möchten Sie möglicherweise Folgendes hinzufügen:

pkg: // solaris / developer / build / gnu-make
pkg: // solaris / developer / build / make
pkg: // solaris / developer / gcc-45
pkg: // solaris / system / header
pkg: // solaris / developer / build / autoconf
pkg: // solaris / developer / build / automake-110

Persönlich würde ich das Obige (möglicherweise weniger die Entwicklerwerkzeuge) zu einem Teil der Standardinstallation meines Unternehmens für neue Server / Zonen machen. Solaris-Systemadministratoren bestehen häufig darauf, sich von der Linux-Welt zu unterscheiden, müssen dies jedoch nicht. Tun Sie es einfach und machen Sie es zu einem Teil Ihrer Standardinstallation. Du wirst es nicht bereuen.

Peterh
quelle
Ich bin mir nicht sicher, ob Sie den Teil lesen, in dem ich sagte: "Da ich keine Kontrolle über die Maschine habe ..." Ich bin sicher, dass dies nützliche Informationen für jemanden sind, aber es ist kaum eine Antwort auf die Frage, die ich gestellt habe .
Eric Wilson
Es handelt sich um Informationen für Ihren Systemadministrator. Er hat dir eine verkrüppelte Maschine gegeben, IMHO. Diese Dinge sollten standardmäßig installiert werden. Aber ja, Sie haben Recht, die Informationen waren vielleicht genauso für andere bestimmt, die an diesen Ort kommen und Ihre Frage lesen. Heute fehlt dir GNU grep, morgen fehlt dir GNU tar usw. Du weißt es einfach noch nicht. :-)
peterh