La recherche récursive ne fonctionne pas pour grep sur Solaris

20

Sur notre serveur Solaris, je trouve que grep -rcela ne fonctionne pas, ce qui est la manière habituelle que j'utilise grep. Il semble que cela egrepa le même comportement.

Étant donné que je n'ai aucun contrôle sur la machine, existe-t-il un moyen d' grepeffectuer une recherche récursive? Ou dois-je rediriger la sortie de finddans grep?

Eric Wilson
la source
1
Quelle version de Solaris utilisez-vous?
jlliagre

Réponses:

4

Je ne connais pas Solaris, mais si vous passez de GNU / linux à Solaris, vous constaterez que la plupart des commandes se comporteront légèrement différemment. La version GNU des outils Unix a des fonctionnalités supplémentaires manquantes dans les Unix "propriétaires".

Vous pouvez télécharger GNU grep (s) ici, puis compiler et installer.

Si vous disposez d'un accès root, vous voudrez peut-être exécuter configure --prefix = / usr / local De telle sorte que les utilitaires s'installent dans / usr / local

Si vous ne disposez pas d'un accès root, vous voudrez peut-être exécuter configure --prefix = $ {HOME} de telle sorte que les utilitaires s'installent dans votre répertoire personnel

bsd
la source
--prefix=${HOME}}/.localest probablement plus conseillé ... pas besoin d'encombrer le répertoire personnel avec shareet les libdossiers
jpaugh
1
Un homme encombré est organisé par un autre homme
bsd
Sans aucun doute! Honnêtement, je me protège contre les jours fériés quand je dis: " share? Ça doit être un répertoire indésirable!" rm -rfAh!
jpaugh
31

Si vous souhaitez l'utiliser find, ce serait le moyen le plus rapide:

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

Cependant, Gnu grep est très probablement déjà installé sur votre machine.

Il fait partie de l'installation par défaut sur Solaris 11 dans /usr/gnu/bin/grep. Idem pour Solaris 10 où vous le trouvez /usr/sfw/bin/ggrep. Sur les versions plus anciennes, il pourrait avoir été installé à partir de sunfreeware ou d'autres référentiels, vérifiez /usr/local/bin/grepet /opt/csw/bin/greppour les emplacements communs.

jlliagre
la source
Vous pouvez également utiliser l' -nameoption avec find.
sleepyweasel
@sleepyweasel -namene cherchera pas à l'intérieur des fichiers, mais recherchera uniquement les noms de fichiers, ce qui n'est pas ce que l'OP demande.
jlliagre
6

Utilisez plutôt ggrep s'il est installé.

Par exemple, recherchez "mysearchstring" à partir du répertoire courant jusqu'à tous les sous-répertoires ( -R), et affichez le nom de fichier et le chemin d'accès pour matches ( -H) et ignorez les fichiers binaires ( -I). N'oubliez pas *la fin de la commande.

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

ggrep est situé dans /usr/sfw/bin Vous pouvez l'ajouter à votre profil avec une commande EXPORT afin de pouvoir l'appeler directement depuis la ligne de commande.

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

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

Underverse
la source
1
Au moins sur mon système, ggrepc'est bien GNU grep. Merci!
jpaugh
3

Téléchargez le ackscript perl autonome sur http://betterthangrep.com/ , mettez-le dans votre $HOME/binet apprenez à l'utiliser à la place. Je trouve que c'est, comme annoncé, meilleur que grep pour de nombreuses utilisations dans mon travail de développement quotidien.

alanc
la source
3

Solaris grep n'a pas d' -roption.

Vous pouvez utiliser la commande suivante.

find . -type f | xargs grep 'sometext'
Sachin Divekar
la source
2
Vous n'avez pas besoin de "contrôler le système" pour compiler GNU grep et l'installer quelque part sous votre répertoire personnel.
Keith Thompson
@KeithThompson merci de le signaler. J'ai corrigé ma réponse.
Sachin Divekar
Ceci est très utile pour trouver tous les fichiers correspondant à un modèle de nom et afficher les résultats avec le fichier. par exemple find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse
1

Oui, vous aurez besoin du grep GNU. Personnellement, je ne manque pas l'indicateur "-r" car vous pouvez faire de même avec une combinaison de findet grepmais cela rappelle que disposer des outils GNU sur votre boîtier Solaris est ce que je considérerais comme la meilleure pratique. Alors c'est parti:

Je n'irais pas à télécharger du code source à partir de divers endroits sur Internet, puis à vous construire. Ce n'est pas nécessaire. Si vous souhaitez simplement que votre Solaris dispose des outils GNU typiques, procédez comme suit:

Si vous utilisez Solaris 10, vous devez vous procurer le Solaris 10 Companion Disk. Avant, il était distribué par Sun, mais il vit maintenant ici . Personnellement, j'en ferais un habbit pour toujours installer le contenu de ce disque ou au moins les parties GNU les plus importantes. Intégrez-le à votre JumpStart (ou à tout ce que vous utilisez) pour les nouveaux serveurs de votre organisation!

Si vous utilisez Solaris 11, la vie est beaucoup plus simple. Les outils GNU sont généralement installés par défaut mais ne sont pas tous propagés dans les zones locales. IFS, le système d'emballage de Solaris 11, vous facilite grandement la vie, vous devriez donc vraiment passer à Solaris 11 (et bien d'autres raisons également). La liste des packages que vous devez toujours considérer comme disponibles pour n'importe quelle zone sont les suivants:

pkg: // solaris / archiveur / 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

et si vous utilisez l'hôte à des fins de développement / construction, vous voudrez peut-être ajouter:

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

Personnellement, je ferais de ce qui précède (potentiellement moins les outils de développement) une partie de l'installation par défaut de mon entreprise pour les nouveaux serveurs / zones. Les administrateurs système Solaris insistent souvent pour être différents du monde Linux, mais ce n'est vraiment pas nécessaire. Faites-le et intégrez-le à votre installation par défaut. Vous ne le regretterez pas.

peterh
la source
Je ne sais pas si vous avez lu la partie où j'ai dit "étant donné que je n'ai aucun contrôle sur la machine ..." Je suis sûr que ce sont des informations utiles à quelqu'un, mais ce n'est guère une réponse à la question que j'ai posée .
Eric Wilson
Ce sont des informations pour votre administrateur système. Il vous a donné une machine paralysée à mon humble avis. Ces choses devraient être installées par défaut. Mais oui, vous avez raison, l'information était peut-être tout autant destinée à ceux qui viennent ici et lisent votre question. Aujourd'hui, vous manque GNP grep, demain vous manquerez GNU tar, etc. Vous ne le savez pas encore. :-)
peterh