[egrep] chaines ne contenant pas ...

InsAne0 -  
crabs Messages postés 909 Statut Membre -
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 909 Statut Membre 507
 
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