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

  • Quels grep? GNU grep? Êtes-vous sous Linux, Solaris, les BSD?
  • I ' m sous Linux.

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

  • @don_crissti Mais combiner des morceaux 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.
  • Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *