2017-07-19 3 views
0

Plusieurs fois, j'ai besoin de rechercher dans un répertoire et ci-dessous un motif dans tous les fichiers avec un type spécifique. Par exemple, je dois demander à grep de ne pas regarder dans des fichiers autres que * .h, * .cpp ou * .c. Mais si j'entre:Un alias pour une combinaison de grep et find est nécessaire

grep -r pattern . 

il regarde dans tous les fichiers. Si je rentre:

grep -r pattern *.c 

il essaie fichiers * .c dans le dossier en cours (pas de fichiers dans mon cas) et des fichiers dans des dossiers * .c (pas de dossier dans mon cas). Je veux le demander aussi regarder dans tous les dossiers mais seulement dans le dossier avec le type donné. Je pense que grep n'est pas suffisant pour être utilisé à cette fin. Donc, je reçois l'aide de trouver aussi, comme ceci:

grep pattern `find . -name '*c'` 

Tout d'abord, permettez-moi de savoir si je ne me trompe pas obtenir de l'aide de trouver. Peut grep être assez? Deuxièmement, je préfère écrire un alias pour bash à utiliser comme ceci:

mygrep pattern c 

à traduire à la même commande en évitant l'utilisation de `et 'et plus simple. J'ai essayé:

alias mygrep="grep $1 `find . -name '*$2'`" 

Mais cela ne fonctionne pas et émet une erreur:

grep: c: No such file or directory 

J'ai essayé de le changer, mais je ne pouvais pas réussir à un alias avec succès.

Une idée?

+1

pour rechercher uniquement le type de fichier spécifique, 'grep -r --include = « pattern'' .. il y a aussi d'autres options comme '--exclude' et' - '* c.' -exclude-dir' .. en tout cas, comme répondu, utilisez la fonction au lieu de l'alias – Sundeep

Répondre

3

Ce serait mieux fait comme function than an alias, et en utilisant -exec au lieu de passing the output de find à grep. Cette sortie serait sujette à la division des mots et à la globalisation, ce qui pourrait produire des résultats surprenants tels quels. Essayez plutôt:

mygrep() { 
    find . -name "*$2" -exec grep "$1" {} + 
} 
+0

oh ok. et où devrais-je mettre cette fonction? – hamidi

+0

@hamidi vous pourriez le mettre dans votre '.bash_profile' ou partout où vous auriez mis l'alias –

+0

oh thx, cela fonctionne parfaitement. puis-je conserver les couleurs de grep? – hamidi