2009-02-26 7 views

Répondre

10
grep google *.php 

si vous voulez couvrir de nombreux répertoires:

find . -name \*.php -print0 | xargs -0 grep -n -H google 

(comme expliqué dans les commentaires, -H est utile si xargs arrive avec un seul fichier restant)

+0

Ce dernier code trouve-t-il des sous-répertoires ou des répertoires maîtres? –

+0

Vous avez besoin du nom car vous ne savez peut-être pas quel fichier il était - en particulier si c'est une mauvaise pause que xargs a regroupé les choses et qu'il ne restait plus qu'un seul fichier. –

+0

N'oubliez pas que vous devez utiliser -print0 pour trouver et -0 à xargs si vous travaillez dans une arborescence de répertoires dont les noms contiennent des espaces comme des espaces blancs. –

0

Utilisez « man grep "pour voir d'autres fonctionnalités.

for i in $(ls *.php); do grep -n --with-filename "google" $i; done; 
+0

qui ne fonctionnera pas - le fichier d'entrée est "stdin" lorsque la commande est écrite de cette façon – Alnitak

+0

Vous avez raison. Changé le code pour fonctionner. –

5

Vous ne devriez pas faire

$ *.php | grep 

Cela signifie « exécuter le premier programme de PHP, avec le nom du reste des caractères génériques en tant que paramètres, puis exécutez grep sur la sortie ».

Il devrait être:

$ grep -n -H "google" *.php 

Le drapeau -n lui dit de faire des numéros de ligne, et le drapeau -H dit à afficher le nom du fichier, même s'il y a fichier uniquement. Grep affichera par défaut les noms de fichiers si plusieurs fichiers sont recherchés, mais vous voulez probablement vous assurer que la sortie est cohérente, quel que soit le nombre de fichiers correspondants.

0
find . -name "*.php" -print | xargs grep -n "searchstring" 
1
find ./*.php -exec grep -l 'google' {} \; 
+0

Cela obtient les noms de fichiers, mais pas les numéros de ligne, n'est-ce pas? –

2

S'il vous plaît jeter un oeil à ack à http://betterthangrep.com. L'équivalent en accusé de réception de ce que vous essayez est:

ack google --php 
Questions connexes