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: