Jai besoin de grep certains fichiers pour voir lesquels contiennent un certain mot:
grep -l word *
Ensuite, jai besoin de grep cette liste de fichiers pour voir lesquels contiennent un mot différent. Le moyen le plus simple serait probablement décrire un script mais je ne sais pas trop comment le faire fonctionner.
Commentaires
Réponse
En supposant quaucun des noms de fichier ne contienne despaces, guillemets simples, des guillemets doubles ou des barres obliques inversées (ou commencer par – avec GNU grep
), vous pouvez faire:
grep -l word * | xargs grep word2
Xargs exécutera le second grep sur chaque fichier du premier grep.
Avec GNU grep
/ xargs
ou compatible, vous pouvez le rendre plus fiable avec:
grep -lZ word ./* | xargs -r0 grep word2
Lutilisation de -Z
rend grep
affiche les noms de fichiers délimités par NUL afin quils puissent être utilisés avec xargs -0
. Loption -r
à xargs
évite lexécution du deuxième grep
si le premier grep
ne trouve rien.
Réponse
grep -l word1 $(grep -l word2 *)
ou peut-être pour lun des deux mots de la même ligne:
grep -w "word1\|word2" *
voir ici
Réponse
Si vous avez besoin de trouver des fichiers contenant un mot, puis de filtrer ces fichiers contenant un autre mot, vous pouvez utiliser une séquence de commandes comme celle-ci:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
– affichera tous les fichiers contenant « word », le nom de fichier sera le premier dans la liste. -
awk -F ":" "{print $1}"
– nimprimera que le nom de fichier de vos résultats -
uniq
– veillera à ce que vous nimprimiez pas le nom de fichier plus de une fois. -
xargs grep word2
– recherchera à nouveau dans la liste des fichiers que vous avez obtenus.
Commentaires
grep -l word1 * | xargs -d'\n' grep -l word2
fonctionne pour tout sauf pour le saut de ligne, ce qui est assez bizarre presque personne ne lutilise.
grep
? GNUgrep
? Êtes-vous sous Linux, Solaris, les BSD?