Commande grep
bonsoir.J'ai dans mon répertoire d'accueil plusieurs fichiers dont l'ectension est .c, lorsque je tape la commade ls | grep *.c , elle ne m'affiche qu'un seul fichier parmi ceux qui ont cete extension.Pour d'autres extensions y a meme pas un seul résultat.Quel est le probleme svp?
2 réponses
-
ModérateurSalut,
ls | grep *.c
grep utilise des expressions régulières. Ce que tu essaies c'est la variante caractères générique comme on utilise sous win quand on cherche des fichiers.
Si je traduit ta commande c'est : liste moi les fichiers de ce répertoire et ensuite choisi que les fichiers qui ont le motif le caractère * ensuite n'importe quel caractère (.) mais un seul fois et avec un c après.
En fait tu vois que grep ne sais pas lire grand chose.
Il pourrait trouver des choses comme *bc ou *hcd ou a*hcf et même mon_f*ichier.c
Pour trouver tes fichiers qui ont l'extension .c la commande find est suffisante
find /rep -name '*.c'
en ce cas la globalisation type windows fonctionne
pour grep ça sera
ls | grep '.*\.c'
Qui veut dire : liste les fichiers ensuite affiche seulement les fichiers qui on le motif ( n'importe quel caractère zéro fois, une fois ou plus suit d'un caractère point (.) et qui contient un c après le point.
Mais dans ce cas la commande grep va trouver aussi a.cc donc on va la modifier
ls | grep '.*\.c$'
Dans ce cas le motif demande une chaine qui se fini avec le caractère poin suit dans c
Utilise plutôt find en ce cas -
ModérateurSalut,
Un simple :
ls *.c
devrait suffire dans ce cas précis. Pour une liste en colonne, rajoute "-1" à "ls" :
ls -1 *.c-
-
Modérateur@lami20jSalut,
Mon intention c'était de le faire un peu comprendre la différance entre une simple globalisation et une regex
J'avais bien compris (et c'est tout en ton "honneur"), mais les "regex" au début c'est "prise de tête en tout genre".
Bonne journée à toi aussi et aux z'autres bien entendu ;-))
-