[egrep] chaines ne contenant pas ...

Fermé
InsAne0 - 16 mai 2006 à 20:36
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 - 16 mai 2006 à 21:52
Bonjour tout le monde,

J'aimerais savoir comment faire une expression régulière qui reconnaît les chaînes ne contenant pas une expression regulière.
Par exemple j'aimerais pouvoir filtrer avec egrep les fichiers finissant par ".wav", mais ne commençant pas par "sys".
Une solution que je n'aime pas serait de faire:
ls | egrep "^[^s][^y][^s].*[.]wav$"

Car dans la liste suivante :
gafdg.wav
sd.wav
sysdf.wav
sys.wav

Je n'aurais que "gafdg.wav" et pas "sd.wav" car il a moins de trois lettres.
J'ai essayé des choses comme
[^(sys)]
sans résultat.

Quelqu'un a une solution ou de la bonne doc' avec des exemples?

1 réponse

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
16 mai 2006 à 21:52
Salut,
Une solution qui mange pas de pain :
- filtrer une première fois pour avoir les points wav
- filitrer une seconde fois pour supprimer ce qui commence par sys
ls | egrep ".*\\.wav$" | egrep -v "^sys.*"

A mon avis il est trop complexe d'essayer d'écrire dans une seule RE un truc
du genre qui marche avec ça mais pas avec ça, autant décomposer.

A+, crabs
0