Téléchargement
illégal
Posez votre question Signaler

Cherche une commande unix [Résolu]

Littlenico 69Messages postés 11 février 2006Date d'inscription - Dernière réponse le 5 juin 2007 à 16:51
bonjour. comment puis-je afficher à l'aide de la commande grep et ls (et donc un pipe) tous les fichier contenant exactement 2 lettres "m" et n'importes quel nombre de caractères ?
merci
Lire la suite 

Cherche une commande unix »

4 réponses
Réponse
+0
moins plus
Salut,

je ne suis pas sur si j'ai bien saisie. C'est ça que tu veux?
# ls -l
total 0
-rw-r--r--  1 root root 0 2006-10-26 19:06 aaammbbb
-rw-r--r--  1 root root 0 2006-10-26 18:48 aaammsdkjm
-rw-r--r--  1 root root 0 2006-10-26 18:57 bbmem
-rw-r--r--  1 root root 0 2006-10-26 18:47 madfsdm
-rw-r--r--  1 root root 0 2006-10-26 18:47 mamiemando
-rw-r--r--  1 root root 0 2006-10-26 18:56 mamie.txt
-rw-r--r--  1 root root 0 2006-10-26 18:48 mm
-rw-r--r--  1 root root 0 2006-10-26 18:47 mmdjfk
Les fichiers dont le nom contient seulement 2 m quelque soit leur position
# ls -l * | grep -x '[^m]*m[^m]*m[^m]*'
-rw-r--r--  1 root root   0 2006-10-26 19:06 aaammbbb
-rw-r--r--  1 root root   0 2006-10-26 18:57 bbmem
-rw-r--r--  1 root root   0 2006-10-26 18:47 madfsdm
-rw-r--r--  1 root root   0 2006-10-26 18:56 mamie.txt
-rw-r--r--  1 root root   0 2006-10-26 18:48 mm
-rw-r--r--  1 root root   0 2006-10-26 18:47 mmdjfk
lami20j
poumiZ - 5 juin 2007 à 16:51
find . -name "*m*m*"
Ajouter un commentaire
Réponse
+0
moins plus
heu oui c'est parfait. il me manquait juste un " non m". merci
Ajouter un commentaire
Réponse
+0
moins plus
Re,

il me manquait juste un " non m".

Souvent on n'aboutit pas à nos recherches avec les regex puisque on raisonne mal la regex et pas parce que on ne connaît pas le métacaractères (qui ne sont pas nombreux).

Ta façon de raisonner la regex est un peu fausse, si je n'abuse pas.

non m pour toi correspond à [^m]
suivant ton raisonnement [m] correspond à m

En fait [m] c'est une classe de caractère qui fait correspondre au caractère m, tandis que [^m] c'est une classe de caractère complementée qui fait correspondre à n'importe quel caractère qui n'est pas m (ce qui n'est pas la même chose avec non m qui veut dire que ça peut être un m ou pas)

Le but d'une regex c'est de faire correspondre et pas de ne pas faire correspondre (pour ça on utilise les opérateurs d'un langage de programmation)

En bref [^m] veut dire faire correspondre à tout caractère qui n'est pas m et pas ne pas faire correspondre au caractère m.

Cette subtilité on peut l'expliquer avec un petit exemple

echo "Salut" | egrep 't[^m]
Normalement si on pense à ne pas faire correspondre au caractère m la regex doit réussir. Mais ce n'est pas le cas.
Pourquoi?
Puisque [^m] veut plutôt dire de faire correspondre à quelque chose et dans notre cas t c'est le dernière caractère.

Bonne continuation.

lami20j
Ajouter un commentaire
Ce document intitulé « cherche une commande unix » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?