OVH Cloud OVH Cloud

[HS] grep & expressions régulières

4 réponses
Avatar
Ketchupy
Bonjour,

je me bats régulièrement sur les expressions régulières avec sed, grep,
etc...
Aujourd'hui, je cherche la négation... En fait j'ai un fichier d'environ
40000 lignes et environ 15000lignes comporte le mot "Invalid". Je
souhaite récuperer toutes les autres lignes, donc je veux faire une
recherche avec grep sur "toutes les lignes qui ne comportent pas le mot
Invalid".. Bah, j'arrive pas à traduire ça sous forme d'expression
régulière :(
J'ai fais différents essais avec ^ et [ ] mais rien de bien concluant..
J'imagine que ça doit etre quelque part dans le man ou l'info de grep,
mais j'ai fais les 2 et j'ai rien trouvé..
Si quelqu'un a une idée, qu'il hésite pas !


Merci




--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

4 réponses

Avatar
christophe
--nextPart8268026.5mQmBhK4GO
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Le mardi 3 Mai 2005 15:55, Ketchupy a écrit :
[...] Aujourd'hui, je cherche la négation... En fait j'ai un fichier
d'environ 40000 lignes et environ 15000lignes comporte le mot "Invalid". Je
souhaite récuperer toutes les autres lignes, [...]


Option -v pour la négation avec grep dans man grep :
-v, --invert-match
Inverser la mise en concordance, pour sélectionner les lign es ne
correspondant pas au motif.

;o)

--
Christophe

--nextPart8268026.5mQmBhK4GO
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBCd6tC31vYFleqyQoRAtj5AJ9OpnRY1lqLRL3XGAmd03Eacn/eZgCfQ334
yvwOxnh1BAR3++oDwCD4/zc ÎrW
-----END PGP SIGNATURE-----

--nextPart8268026.5mQmBhK4GO--


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
space2d
Le Tue, 03 May 2005 16:20:22 +0200, Ketchupy a écrit :

Bonjour,

je me bats régulièrement sur les expressions régulières avec sed, grep,
etc...
Aujourd'hui, je cherche la négation... En fait j'ai un fichier d'environ
40000 lignes et environ 15000lignes comporte le mot "Invalid". Je
souhaite récuperer toutes les autres lignes, donc je veux faire une
recherche avec grep sur "toutes les lignes qui ne comportent pas le mot
Invalid".. Bah, j'arrive pas à traduire ça sous forme d'expression
régulière :(
J'ai fais différents essais avec ^ et [ ] mais rien de bien concluant..
J'imagine que ça doit etre quelque part dans le man ou l'info de grep,
mais j'ai fais les 2 et j'ai rien trouvé..
Si quelqu'un a une idée, qu'il hésite pas !


Merci



Pour utiliser les expressions régulières étendues
utilise 'egrep'


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
fra-duf-no-spam
Le 12907ième jour après Epoch,
écrivait:

Le Tue, 03 May 2005 16:20:22 +0200, Ketchupy a écrit :

Bonjour,

je me bats régulièrement sur les expressions régulières avec sed, grep,
etc...
Aujourd'hui, je cherche la négation... En fait j'ai un fichier d'environ
40000 lignes et environ 15000lignes comporte le mot "Invalid". Je
souhaite récuperer toutes les autres lignes, donc je veux faire une
recherche avec grep sur "toutes les lignes qui ne comportent pas le mot
Invalid".. Bah, j'arrive pas à traduire ça sous forme d'expression
régulière :(
J'ai fais différents essais avec ^ et [ ] mais rien de bien concluant..
J'imagine que ça doit etre quelque part dans le man ou l'info de grep,
mais j'ai fais les 2 et j'ai rien trouvé..
Si quelqu'un a une idée, qu'il hésite pas !


Merci



Pour utiliser les expressions régulières étendues
utilise 'egrep'



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. 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 ;)


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
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


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact