Pour voir tous les fichiers php qui contiennent « abc » Je peux utiliser ce script simple:Ecrire un script shell qui trouve-greps et sorties nom de fichier et le contenu en 1 ligne
find . -name "*php" -exec grep -l abc {} \;
je peux omettre le -l et je me extrait une partie du contenu au lieu des noms de fichiers comme résultats:
find . -name "*php" -exec grep abc {} \;
ce que je voudrais maintenant est une version qui fait les deux en même temps, mais sur la même ligne.
Résultats attendus:
path1/filename1: lorem abc ipsum
path2/filename2: ipsum abc lorem
path3/filename3: non abc quod
plus ou moins comme grep abc *
fait.
Édition: Je souhaite l'utiliser comme un simple script shell. Ce serait génial si la sortie est sur une ligne, donc plus de grepping serait possible. Mais il n'est pas nécessaire que le script ne soit qu'une ligne, je le mets de toute façon dans un fichier script bash.
Éditer 2: Plus tard, j'ai trouvé "ack", ce qui est un excellent outil et je l'utilise maintenant dans la plupart des cas au lieu de grep. Il fait tout cela et plus encore. http://betterthangrep.com/ Vous écririez ack --php --nogroup abc
pour obtenir le résultat souhaité
Le -H est pas nécessaire avec xargs parce que grep reçoit plus d'un fichier sur la ligne de commande, et dans ce cas il sort le nom du fichier avec la capture; Je pense que c'est un comportement standard, et devrait fonctionner aussi sur des greps différents des vôtres. Notez qu'il vaut mieux utiliser 'find ... -print0' et rediriger la sortie vers 'xargs -0', de sorte qu'un séparateur 0 est utilisé, et votre commande fonctionnera aussi avec des noms de fichiers désagréables (par exemple contenant des espaces) . –
Merci pour votre commentaire. J'ai mis à jour la réponse. – Stephan202
Notez que l'autre façon de traiter la possibilité qu'un fichier soit passé à grep est d'ajouter/dev/null à la commande, donc grep a toujours au moins deux fichiers à rechercher. L'option '-H' pour grep ne fait pas partie de la spécification POSIX - c'est une extension GNU utile. –