7 votes

grep pour la chaîne de caractères dans tous les fichiers dans les répertoires avec certains noms

J'ai des fichiers csv dans des répertoires avec cette structure :

20090120/
20090121/
20090122/
etc...

Je veux rechercher une certaine chaîne dans tous les fichiers csv de ces répertoires, mais seulement pour le mois de janvier 2009, par exemple 200901*/*.csv.

Existe-t-il un argument de ligne de commande bash permettant de faire cela ?

13voto

Phil Frost Points 1110

Sí. grep "a certain string" 200901*/*.csv .

5voto

paxdiablo Points 341644

Vous avez besoin de quelque chose comme :

grep NEEDLE 200901*/*.csv

(en supposant que votre chaîne de recherche est NEEDLE bien sûr, changez-le en ce que vous voulez. en fait que vous recherchez).

Le site bash est tout à fait capable de développer des chemins et des noms de fichiers à plusieurs niveaux.

Bien entendu, cela ne se limite qu'aux fichiers CSV situés un répertoire plus bas. Si vous voulez rechercher des sous-arbres entiers, vous devrez utiliser le mode légèrement compliqué (et adaptable) find commandement.

Cependant, en supposant que vous puissiez fixer une limite à la profondeur, vous pourriez vous en sortir avec quelque chose comme (pour trois niveaux) :

grep NEEDLE 200901*/*.csv 200901*/*/*.csv 200901*/*/*/*.csv

4voto

Debaditya Points 1190

Essayez ceci :

grep -lr "Pattern" 200901*/*.csv

1voto

tor Points 11

Essayez une combinaison de trouver pour rechercher des modèles de noms de fichiers spécifiques et grep pour avoir trouvé le modèle :

find . -name "*.csv" -print -exec grep -n "NEEDLE" {} \; | grep -B1 "NEEDLE"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X