Comment afficher les noms de fichiers uniquement après une recherche par mot-clé grep?

15

J'ai actuellement n fichiers de données dans un répertoire où chaque fichier contient au plus 1 ligne de données très longues. Ma structure de répertoire est

director/
    data1.json
    data2.json
    data3.json

Je sais qu'au moins un de ces fichiers contient le mot-clé que je recherche, mais comme la ligne de données est trop longue, elle couvre tout mon terminal. Comment puis-je obtenir le nom de fichier uniquement après avoir effectué une grep de mot clé? La commande grep que j'utilise est:

grep keyword *.json
Thierry Lam
la source

Réponses:

30

L'argument -l devrait faire ce que vous voulez.

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)
l'autre reçoit
la source
7

Vous pouvez utiliser xargs en combinaison avec --null avec grep ou --print0 avec ack. Je trouve que la vitesse d'ack est plus rapide.

grep -lr --null searchterm * | xargs -I {} -0 echo {}

ack -lr --print0 searchterm * | xargs -I {} -0 echo {}

puissance intérieure
la source