Je voudrais lister les fichiers de manière récursive et unique qui contiennent le mot donné.

Exemple : Vérification du mot « check », je fais normalement est un grep

$ grep check * -R 

Mais comme il y a de nombreuses occurrences de ce mot, jobtiens beaucoup de sortie. Jai donc juste besoin de lister les noms de fichiers qui contiennent le mot de recherche donné. Je suppose quune astuce avec find et xargs suffirait ici, mais pas sûr.

Des idées?

Réponse

Utilisez -l ou --files-with-matches option qui est documentée comme suit:

Supprimer la sortie normale; à la place, imprimez le nom de chaque fichier dentrée à partir duquel la sortie aurait normalement été imprimée. Le scan sarrêtera lors de la première correspondance. (-l est spécifié par POSIX.)

Donc, pour votre exemple, vous pouvez utiliser ce qui suit:

$ grep check * -lR 

Commentaires

  • Fonctionne également sur MSYS. Super!
  • Jai utilisé grep -rl "text to find" "/usr/share" et cela a très bien fonctionné!

Réponse

find . -type f -exec grep -l check {} + 

Vous ne voulez probablement pas utiliser loption -R qui avec les versions modernes de GNU grep suit les liens symboliques lors de la descente de répertoires. Utilisez plutôt loption -r qui depuis la version 2.12 (avril 2012) ne suit plus les liens symboliques.

Si votre grep nest pas celui de GNU, ou est plus ancien que la version 2.12, ou si vous avez besoin que votre code soit portable sur des systèmes GNU non à la pointe de la technologie, utilisez find ci-dessus.

Sinon, vous pouvez faire:

grep -rl check . 

Nutilisez pas * (car cela omettrait les fichiers cachés dans le répertoire courant (et dans le répertoire courant uniquement) et causerait des problèmes pour les fichiers dont le nom commence par -), évitez de passer options après les arguments car ce nest pas garanti doit fonctionner en fonction de lenvironnement et nest pas portable.

Réponse

Essayez ceci:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

Quant aux grep indicateurs …

-c sera renvoie un nom de fichier suivi de: et un nombre indiquant combien de fois la chaîne de recherche apparaît dans le fichier donné.

-v prendra la sortie du premier grep rechercher, filtrer les fichiers avec zéro résultat et imprimer uniquement les fichiers avec des résultats différents de zéro.

Commentaires

  • Cela obtiendra un faux négatif si vous avez des fichiers (ou des directeurs (s)) dont les noms contiennent :0. Il vaut mieux ' faire grep -v ':0$'. Même cela étouffera les noms de chemin contenant une ou plusieurs nouvelles lignes.

Réponse

grep -lR "text-to-find" <where-to-find> fonctionne également très bien.

Par exemple, grep -lR "NAVIGATE" . où nous trouvons le mot NAVIGATE dans le . dans le répertoire courant.

Réponse

grep -rin « whatToFind » locationToFInd

eg $ grep -rin « vihaan ».

recherchera et listera récursivement les noms de fichiers et les lignes correspondantes qui contiennent « vihaan », « . » fait référence au répertoire courant.

Réponse

find . -type f | grep "keyword" * 

recherche dans le répertoire courant. Pour effectuer une recherche depuis la racine, spécifiez / au lieu de .

Réponse

 grep -rli trim \` find . -name *.q \` 

Vous donne la liste des .q fichiers contient le mot-clé trim

Laisser un commentaire

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