Comment puis-je utiliser grep pour trouver un mot dans un dossier?

Sous Windows, j’aurais fait une recherche pour trouver un mot dans un dossier. De même, je veux savoir si un mot spécifique apparaît dans un répertoire contenant de nombreux sous-répertoires et fichiers. Mes recherches pour la syntaxe grep montrent que je dois spécifier le nom du fichier, c.-à-d.

Maintenant, je ne connais pas le nom du fichier, alors que dois-je faire? Un ami a suggéré de faire grep -nr ssortingng , mais je ne sais pas ce que cela signifie et je n’ai eu aucun résultat (il n’y a pas de réponse avant que j'émette un ctrl + c ).

 grep -nr 'yourSsortingng*' . 

Le point à la fin recherche le répertoire en cours. Signification pour chaque paramètre:

 -n Show relative line number in the file 'yourSsortingng*' Ssortingng for search, followed by a wildcard character -r Recursively search subdirectories listed . Directory for search (current directory) 

grep -nr 'MobileAppSer*' . ( MobileAppServlet.java ou MobileAppServlet.class ou MobileAppServlet.txt ; 'MobileAppASer*.*' Est une autre façon de faire la même chose.)

Pour vérifier plus de parameters, utilisez la commande man grep .

grep -nr ssortingng my_directory

Notes complémentaires: cela satisfait la syntaxe grep [options] ssortingng filename car dans les systèmes de type Unix, un répertoire est une sorte de fichier (il existe un terme “fichier normal” pour désigner spécifiquement les entités appelées simplement “fichiers” dans Windows) ).

grep -nr ssortingng lit le contenu à rechercher à partir de l’entrée standard, c’est pourquoi il attend simplement que vous l’ayez saisi et arrête de le faire lorsque vous appuyez sur ^ C (il s’arrêterait aussi sur ^ D, qui est la combinaison de touches) pour fin de fichier).

GREP : Global Regular Expression Print / Parser / Processor / Program.
Vous pouvez l’utiliser pour rechercher le répertoire en cours.
Vous pouvez spécifier -R pour “recursive”, ce qui signifie que le programme recherche dans tous les sous-dossiers et leurs sous-dossiers, ainsi que les sous-dossiers de leur sous-dossier, etc.

 grep -R "your word" . 

-n imprimera le numéro de ligne, où il correspond dans le fichier.
-i recherchera la casse (majuscules / non-majuscules).

 grep -inR "your regex pattern" . 

Il y a aussi:

 find directory_name -type f -print0 | xargs -0 grep -li word 

mais cela pourrait être un peu trop pour un débutant.

find est un répertoire walker / lister polyvalent, -type f signifie “rechercher des fichiers simples plutôt que des répertoires et des canaux nommés et qu’avez-vous”, -print0 signifie “les imprimer sur la sortie standard en utilisant des caractères nuls comme délimiteurs”. La sortie de find est envoyée à xargs -0 et elle saisit son entrée standard en morceaux (pour éviter les limitations de longueur de ligne de commande) en utilisant des caractères nuls comme séparateur d’enregistrements (plutôt que le newline standard) et applique le grep -li word à chaque ensemble de fichiers. Sur le grep , -l signifie “lister les fichiers correspondants” et -i signifie “insensible à la casse”; vous pouvez généralement combiner des options à un seul caractère pour voir -li plus souvent que -l -i .

Si vous n’utilisez pas -print0 et -0 vous rencontrerez des problèmes avec les noms de fichiers contenant des espaces.

 grep -nr search_ssortingng search_dir 

fera une recherche RECURSIVE (ce qui signifie le répertoire et tous ses sous-répertoires) pour rechercher la chaîne de recherche. (comme correctement répondu par usta).

La raison pour laquelle vous ne receviez aucune réponse avec la suggestion de votre ami:

 grep -nr ssortingng 

est parce qu’aucun répertoire n’a été spécifié. Si vous vous trouvez dans le répertoire dans lequel vous souhaitez effectuer la recherche, vous devez procéder comme suit:

 grep -nr ssortingng . 

Il est important d’inclure le ‘.’ character, car cela indique à grep de rechercher dans ce répertoire.

  1. grep -r "yourssortingng" * Trouvera “yourssortingng” dans tous les fichiers et dossiers

Maintenant, si vous voulez rechercher deux chaînes différentes en même temps, vous pouvez toujours utiliser l’option E et append des mots pour la recherche. exemple après la pause

  1. grep -rE "yourssortingng|yourotherssortingng|$" * recherchera les emplacements des listes où vos yourssortingng ou yourotherssortingng yourssortingng yourotherssortingng

Une autre option que j’aime utiliser:

 find folder_name -type f -exec grep your_text {} \; 

-type f ne retourne que des fichiers et non des dossiers

-exec et {} exécutent le grep sur les fichiers trouvés lors de la recherche (la syntaxe exacte est “-exec command {}”).

Pourquoi ne pas faire une recherche récursive pour trouver toutes les instances dans les sous-répertoires:

grep -r ‘text’ *

Cela fonctionne comme un charme.

La réponse que vous avez choisie est correcte et fonctionne, mais ce n’est pas la bonne façon de le faire, car:

 grep -nr yourSsortingng* . 

Cela recherche en fait la chaîne "yourSsortingn" et "g" 0 ou plusieurs fois.

Donc, la bonne façon de le faire est:

 grep -nr \w*yourSsortingng\w* . 

Cette commande recherche la chaîne avec n’importe quel caractère avant et après sur le dossier en cours.

N’utilisez pas grep. Téléchargez Silver Searcher ou ripgrep . Ils sont tous deux exceptionnels et beaucoup plus rapides que grep ou ack avec des tonnes d’options.

Semblable à la réponse publiée par @eLRuLL, un moyen plus simple de spécifier une recherche qui respecte les limites de mots consiste à utiliser l’option -w :

 grep -wnr "yourSsortingng" .