[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

  1. 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