Disons que je dois trouver la fonction GetTypes()
dans tous les fichiers source C # ( .cs
) des répertoires / sous-répertoires.
J'ai utilisé grep -rn GetTypes *.cs
, mais j'ai eu une erreur avec grep: *.cs: No such file or directory
. J'ai dû utiliser grep -rn GetTypes *
, mais dans ce cas, il montre non *.cs
seulement tous les fichiers .
Quelle commande dois-je utiliser pour rechercher la chaîne uniquement dans les .cs
fichiers?
Réponses:
Si votre coque est bash ≥4, insérez
shopt -s globstar
votre~/.bashrc
. Si votre shell est zsh, vous êtes bon. Ensuite, vous pouvez exécuter**/*.cs
signifie tous les fichiers correspondant*.cs
dans le répertoire courant, ou dans ses sous-répertoires, récursivement.Si vous n'exécutez pas un shell qui prend en charge
**
mais que votre grep le prend en charge--include
, vous pouvez effectuer un grep récursif et indiquergrep
de ne considérer que les fichiers correspondant à certains modèles. Notez les guillemets autour du modèle de nom de fichier: il est interprété par grep, pas par le shell.Avec seulement des outils portables (certains systèmes n'en ont pas
grep -r
du tout), utilisezfind
pour la partie traversée de répertoire etgrep
pour la partie recherche de texte.la source
globstar
option pour un shell Bash 4+ courant, utilisez:shopt -s globstar
.Vous devriez consulter le petit remplacement grep / find billiant appelé
ack
. Il est spécifiquement configuré pour rechercher dans les répertoires des fichiers de code source.Votre commande ressemblerait à ceci:
la source
Si vous utilisez GNU
grep
, vous pouvez spécifier les fichiers à inclure dans une traversée de répertoire récursive:(où la dernière période désigne le répertoire de travail actuel comme racine du parcours)
la source
J'utilise une combinaison de find et grep:
Pour
find
, vous pouvez remplacer.
par un répertoire et supprimer-name
si vous souhaitez rechercher dans chaque fichier.Pour
grep
,-bn
imprimera la position et le numéro de ligne et--color
aidera vos yeux en mettant en évidence ce que vous recherchez.la source