2009-06-22 8 views

Répondre

14

I love ack:

qui vous entrez plutôt?

$ grep pattern $(find . -type f | grep -v '\.svn')

$ ack pattern

+0

ack --python foo est doux! –

+0

ack est les genoux d'abeilles. – seth

4

Vous pouvez trouver votre shell vous aide. Par exemple, dans zsh, vous pouvez faire

grep foo **/*.py 

à condition que le nombre de fichiers py ne dépasse pas le nombre maximum d'arguments autorisés pour une commande (64K?). Notez que vous pouvez qualifier le regroupement de fichiers, par ex.

grep foo **/*.py(mh-5) 

qui vous donnera tout modifié au cours des 5 dernières heures.

+0

pas mieux, presque le même nombre de frappes; –

+0

D'où le zsh globbing –

1
grep -r --include='*.py' foo * 
+3

C'est une définition étrange du mot "moins" – skaffman

+0

Ouais. Moins d'enchaînement semble moins m'inquiéter, mais OP n'a pas demandé moins d'inquiétude, il a demandé moins de dactylographie. Edité à quelque chose de plus court. Légèrement. – chaos

1
find . -name "*.py" -exec grep -H foo '{}' ';' 
+3

Astuce: terminez votre expression avec un '+' au lieu de ';', ce qui fera que find enverra tous les fichiers correspondants à un seul processus grep au lieu d'en forcer un nouveau pour chaque fichier correspondant. Beaucoup plus efficace de cette façon. –

2

zsh a globbing récursive, de sorte que vous pouvez faire

grep foo **/*.py 

Regardez ma, pas trouver :)

MISE À JOUR: Oh, aussi si vous faites quelque chose de beaucoup ce ne fait pas de mal à alias ou écrire une fonction pour cela bien sûr

+0

Compte tenu de la capacité de zsh à le faire, je dois à peine jouer avec la syntaxe arcane de find –

2

Il s'appelle grep * wink * :-)

Tous py dans le répertoire courant

grep -R foo *.py 

Tous les fichiers en cours et tout sous-répertoire

grep -R foo . 
+1

+1: -R est standard sur la plupart des commandes UNIX pour analyser aussi les sous-répertoires récursivement. – Powerlord

+7

Vous n'avez pas besoin de citer ou d'échapper à votre globbing? Sinon, le shell développera ceci dans le répertoire courant? –

+0

Vous avez raison à ce sujet – jitter

3

Avez-vous essayé ack.

+0

oui, ack est un excellent remplacement pour grep (au moins pour les programmeurs) – dfa

0

J'utilise beaucoup quelque chose qui ressemble beaucoup à votre paire find/grep, mais avec encore plus de conditions - à l'exclusion des fichiers dans les répertoires .svn, par exemple. Je fais tellement de choses que je viens de faire des scripts autour de ces invocations, donc je peux appeler "src-grep ..." et faire ce que vous faites ici. (Puis j'ai ajouté une extension facultative pour un certain nombre de lignes de contexte à passer à l'indicateur grep -C, s'il est fourni, et une version séparée pour grep les résultats pour les instructions de définition.)

Ceci est plus utile et plus rapide que récursif grep pour moi.

Questions connexes