Rechercher une chaîne uniquement dans un fichier spécifique à l'intérieur des sous-répertoires


10

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 *.csseulement tous les fichiers .

Quelle commande dois-je utiliser pour rechercher la chaîne uniquement dans les .csfichiers?


Réponses:


12

Si votre coque est bash ≥4, insérez shopt -s globstarvotre ~/.bashrc. Si votre shell est zsh, vous êtes bon. Ensuite, vous pouvez exécuter

grep -n GetTypes **/*.cs

**/*.cssignifie tous les fichiers correspondant *.csdans 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 indiquer grepde 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.

grep -rn --include='*.cs' GetTypes .

Avec seulement des outils portables (certains systèmes n'en ont pas grep -rdu tout), utilisez findpour la partie traversée de répertoire et greppour la partie recherche de texte.

find . -name '*.cs' -exec grep -n GetTypes {} +

Pour définir temporaire l' globstaroption pour un shell Bash 4+ courant, utilisez: shopt -s globstar.
tjanez

8

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:

ack --csharp GetTypes

4

Si vous utilisez GNU grep, vous pouvez spécifier les fichiers à inclure dans une traversée de répertoire récursive:

grep --include '*.cs' -rn GetTypes .

(où la dernière période désigne le répertoire de travail actuel comme racine du parcours)


4

J'utilise une combinaison de find et grep:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

Pour find, vous pouvez remplacer .par un répertoire et supprimer -namesi vous souhaitez rechercher dans chaque fichier.

Pour grep, -bnimprimera la position et le numéro de ligne et --coloraidera vos yeux en mettant en évidence ce que vous recherchez.

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.