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 indiquent que je dois spécifier le nom du fichier, c'est-à-dire grep string filename
.
Maintenant, je ne connais pas le nom du fichier, alors que dois-je faire? Un ami a suggéré de faire grep -nr string
, mais je ne sais pas ce que cela signifie et je n’obtiens aucun résultat (il n’ya pas de réponse tant que je n’ai pas envoyé de message). ctrl + c).
grep -nr 'yourString*' .
Le point à la fin recherche le répertoire en cours. Signification pour chaque paramètre:
-n Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r Recursively search subdirectories listed
. Directory for search (current directory)
grep -nr 'MobileAppSer*' .
(Trouverait 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 paramètres, utilisez man grep command.
grep -nr string my_directory
Notes complémentaires: ceci respecte la syntaxe grep [options] string 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 des entités appelées simplement "fichiers" dans Windows).
grep -nr string
lit le contenu à rechercher à partir de l’entrée standard, c’est pourquoi il attend simplement votre saisie et cesse de le faire lorsque vous appuyez sur ^ C (il s’arrête également sur ^ D, qui est la combinaison de touches du fichier).
GREP: Global Print Expression Regular/Analyseur/Processeur/Programme.
Vous pouvez l’utiliser pour effectuer une recherche dans le répertoire actuel.
Vous pouvez spécifier -R pour "récursif", ce qui signifie que le programme effectue une recherche dans tous les sous-dossiers, leurs sous-dossiers, leurs sous-dossiers, etc.
grep -R "your Word" .
-n
imprimera le numéro de ligne, où il correspond dans le fichier.-i
recherchera la casse (majuscules/minuscules).
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 beaucoup pour un débutant.
find
est un répertoire généraliste, -type f
signifie "recherchez les fichiers bruts plutôt que les répertoires et les canaux nommés et ce que vous avez", -print0
signifie "affichez-les sur la sortie standard en utilisant des caractères nuls comme délimiteurs". La sortie de find
est envoyée à xargs -0
. 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’enregistrement (plutôt que la nouvelle ligne standard) et applique grep -li Word
à chaque ensemble de fichiers. Sur 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 que vous voyiez -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. Leur utilisation est donc une bonne habitude.
grep -nr search_string search_dir
fera une recherche RECURSIVE (le répertoire et tous ses sous-répertoires) pour la chaîne de recherche. (comme correctement répondu par usta).
La raison pour laquelle vous ne recevez aucune réponse à la suggestion de votre ami de:
grep -nr string
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 string .
Il est important d'inclure le '.' caractère, car cela indique à grep de rechercher dans cet annuaire.
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.
grep -r "yourstring" *
Trouvera "yourstring" dans tous les fichiers et dossiers Maintenant, si vous voulez chercher deux chaînes différentes en même temps, vous pouvez toujours utiliser l'option E et ajouter des mots pour la recherche. exemple après la pause
grep -rE "yourstring|yourotherstring|$" *
recherchera les emplacements de liste où yourstring
ou yourotherstring
correspondUne autre option que j'aime utiliser:
find folder_name -type f -exec grep your_text {} \;
-type f ne vous renvoie que des fichiers et non des dossiers
-exec et {} exécute le grep sur les fichiers trouvés dans la recherche (la syntaxe exacte est "-exec commande {}").
La réponse que vous avez sélectionnée est correcte et fonctionne, mais ce n'est pas la bonne façon de le faire, car:
grep -nr yourString* .
Cela recherche en fait la chaîne "yourStrin"
et "g"
0 ou plusieurs fois.
Donc, la bonne façon de le faire est:
grep -nr \w*yourString\w* .
Cette commande recherche la chaîne avec n'importe quel caractère avant et après sur le dossier actuel.
Semblable à la réponse publiée par @eLRuLL, un moyen plus simple de spécifier une recherche qui respecte les limites de Word consiste à utiliser l'option -w
:
grep -wnr "yourString" .
grep -R "string" /directory/
Il s’agissait de grep -r mais j’ai remarqué que cela ne fonctionnait plus dans ma version.
grep --version
grep (GNU grep) 3.1
Ne pas utiliser grep. Télécharger Silver Searcher ou ripgrep . Ils sont tous les deux exceptionnels et bien plus rapides que grep ou ack avec des tonnes d’options.