[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] grep & expressions régulières



François TOURDE a écrit, mercredi 4 mai 2005, à 15:09 :
[...]
> Ouais, mais pour "nier" une expression régulière complètement, c'est
> pas toujours la joie :) ... Dans son cas, l'option -v est la plus
> adaptée. 

Dès qu'on souhaite  une condition logique un peu  complexe, awk est plus
indiqué : pour extraire les lignes avec Invalides mais pas 14-18,

 awk '/Invalides/ && ! /14-18/'

au lieu de

 grep ^Invalides | grep -v 14-18

(on peut se demander pourquoi -v a été choisi pour la négation).

Sed peut le faire aussi, bien sûr

 sed -ne '/Invalides/{/14-18/d;p}'
 sed -e '/Invalides/!d;/14-18/d'

mais c'est moins lisible à mon goût.

> Sinon, tu es obligé de faire des trucs du genre:
> 
> ^([^I]|I[^n]|In[^v]|...|Invali[^d]|I$|In$|...|Invali$)*$
>
> Ce qui est tout sauf sexy ;)
 
Disons que  c'est /théoriquement/ faisable :).   De même, un  ET dans le
désordre ne peut guère dépasser deux termes :

 grep -E '(tata.*titi|titi.*tata)'

La traduction en un seul grep de

 awk '/tata/ && /titi/ && /toto/ && /tutu/'

est laissée en exercice.
-- 
Jacques L'helgoualc'h



Reply to: