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

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.)

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 {}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.