web-dev-qa-db-fra.com

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

Sur notre serveur Solaris, je trouve que grep -r ne fonctionne pas, quelle est la manière habituelle que j'utilise grep. Il semble que egrep a le même comportement.

Étant donné que je n'ai aucun contrôle sur la machine, y a-t-il un moyen d'avoir grep effectuer une recherche récursive? Ou dois-je piper la sortie de find dans grep?

20
Eric Wilson

Je ne connais pas Solaris, mais si vous passez de GNU/Linux à Solaris, vous trouverez la plupart des commandes se comportera légèrement différente. Le GNU== Version d'outils UNIX contient des fonctionnalités supplémentaires manquantes dans les UNIXES "PROPRIÉTAIRES".

Vous pouvez télécharger GNU Grep (s) ICI puis compiler et installer.

Si vous avez un accès root, vous souhaiterez peut-être exécuter configuration --Prefix =/USR/local de telle que les utilitaires s'installent dans/usr/local

Si vous n'avez pas d'accès root, vous pouvez vouloir exécuter configuration --prefix = $ {home} de telle que les utilitaires installent dans votre répertoire personnel

4
bsd

Si vous voulez 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. Même chose pour Solaris 10 où vous le trouvez dans /usr/sfw/bin/ggrep. Sur les versions plus anciennes, il aurait pu être installé à partir de Sunfreeware ou d'autres référentiels, check /usr/local/bin/grep et /opt/csw/bin/grep Pour des emplacements communs.

32
jlliagre

Utilisez GGREP à la place s'il est installé.

Par exemple. Recherchez "MySearchstring" dans le répertoire actuel vers tous les sous-répertoires (-R), et montrer le nom du fichier et le chemin pour les matchs (-H) et ignorer les fichiers binaires (-I). N'oubliez pas le * à 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 que vous puissiez l'appeler directement à partir de la ligne de commande.

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

Version Solaris: Sunos 5.10 generic_147440-13 Sun4u Sparc Sunw, Sparc-Enterprise

6
Underverse

Solaris Grep n'a pas -r option.

Vous pouvez utiliser la commande suivante.

find . -type f | xargs grep 'sometext'
3
Sachin Divekar

Téléchargez l'autonomone ack perl script de http://betterthangrep.com/ , mettez-le dans votre $HOME/bin et apprenez à l'utiliser à la place. Je trouve que c'est, comme annoncé mieux que Grep pour de nombreuses utilisations de mon travail de développement quotidien.

3
alanc

Oui, vous aurez besoin du GNU grep. Personnellement, je ne manquez pas le drapeau "-r" car vous pouvez faire la même chose avec une combinaison de find et grep et _ $ var] _ ] _ Mais cela rappelle que d 'avoir le GNU outils disponible sur votre boîte Solaris est ce que je considérerais la meilleure pratique. Alors voilà, nous allons:

Je n'irais pas sur le téléchargement de code source de divers endroits sur Internet, puis de vous construire. Ce n'est pas nécessaire. Si vous voulez simplement que votre Solaris ait le fichier typique GNU outils disponible, alors faites comme suit:

Si vous êtes sur Solaris 10 , vous devez obtenir le disque d'accompagnement Solaris 10. Cela était distribué par SOLEL, mais il vit maintenant ici . Personnellement, je ferais toujours une habbit d'installer toujours le contenu de ce disque ou au moins le plus important GNU Pièces. Faites cela partie de votre Jumpstart (ou tout ce que vous utilisez) pour les nouveaux serveurs de votre organisation !

Si vous êtes sur Solaris 11 La vie est beaucoup plus simple. Les GNU outils 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 sur Solaris 11, rend votre vie beaucoup plus facile pour que vous devriez vraiment bouger à Solaris 11 (beaucoup d'autres raisons aussi). La liste des forfaits que vous devriez envisager de toujours avoir la disponibilité de toutes les zones est:

[ ] PKG: // Solaris/Fichier/GNU-CARUTILILS 
 PKG: // Solaris/Fichier/GNU-WESTUTILES 
 PKG: // Solaris/Texte/Gawk [.____] /Solaris/text/gnu-diffutils
Pkgg://solaris/text/gnu-grep
Pkgg://solaris/text/gnu-sed

et si vous utilisez l'hôte pour le développement/le but de construction, vous voudrez peut-être ajouter:

[.____] PKG: // Solaris/Développeur/Build/GNU-FAIT 
 PKG: // Solaris/Developer/Build/Faire [. ____] ( ____]]

Personnellement, je ferais ce qui précède (potentiellement moins les outils de développement) de l'installation par défaut de mon entreprise pour les nouveaux serveurs/zones. Solaris Sysadmins insiste souvent sur la différence du monde de Linux, mais il n'y a vraiment pas besoin de. Faites-le simplement et faites cela partie de votre installation par défaut. Vous ne le regretterez pas.

1
peterh