Egrep & ET logique

Résolu
gunbol Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

Je suis à la recherche d'une solution toute simple pour faire un egrep avec expression contenant un ET.

example
echo "coucou---------test" | egrep -e "coucou&test"
---> coucou---------test

Cela marche bien avec un OU logique symbolisé par |

J'aimerais bien avoir le ET en une seule et même expression

Je sais qu'on pourrait avoir la solution avec un
echo "coucou---------test" | egrep -e "coucou" | egrep -e "test"
, mais j'aimerais éviter cette solution.

(une précision, je suis sur Solaris 9)

Merci d'avance.

Gunt.
A voir également:

5 réponses

gunbol Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   4
 
Hello,

Merci pour vos réponses !

En revanche
egrep 'coucou.*test' ne trouvera que "coucoublablatest" et non "testblablacoucou"

et

egrep '(test|coucou).*(test|coucou)' essai

trouvera "coucoublablacoucou" alors que test n'y figure pas :o) !

Je pense qu'il va falloir que j'enchaine les greps... :o(

merci pour votre aide.

@+

Gunth.
1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

en fait tu n'as pas besoin de ET quand la recherche se fait sur la même ligne
il suffit d'utiliser le métacartère point . qui signifie n'importe quelle caractère quantifié par *
egrep 'coucou.*test'
--
106485010510997108
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Une solution...
 egrep  '(test|coucou).*(test|coucou)' 
Ce qui donne :
jp@MDK:~/tmpfs ssh$ cat essai
coucou tout seul
test tout seul
coucou et test ensemble
test et coucou encore une fois
test seul
coucou seul aussi
ici coucou et là test conjointement

jp@MDK:~/tmpfs ssh$ egrep  '(test|coucou).*(test|coucou)' essai
coucou et test ensemble
test et coucou encore une fois
ici coucou et là test conjointement

jp@MDK:~/tmpfs ssh$
;-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Effectivement comme ça l'ordre des motifs cherchés ne compte pas.
Mais bon, comme tu le sais, pour écrire une regex efficace il faut connaître la structure de texte ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
J'ai anticipé au cas ou, peut être pour rien d'ailleurs ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
jp@MDK:~/tmpfs ssh$ cat essai
coucou tout seul
test tout seul
coucou et test ensemble
test et coucou encore une fois
test seul
coucou seul aussi
ici coucou et là test conjointement
là coucou et coucou
et ici test et test

jp@MDK:~/tmpfs ssh$ egrep  'test.*coucou|coucou.*test' essai
coucou et test ensemble
test et coucou encore une fois
ici coucou et là test conjointement

jp@MDK:~/tmpfs ssh$
;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
 
Et avc ça ?
(\<test\>.*\<coucou\>|\<coucou\>.*\<test\>)
ça reste simple, et ça evite les "coucou coucou", ou autre "test test"

A plus

Edit: arf :(
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut ;-)

en fait il n'y a pas besoin de l'assertion début mot
lami20j@debian:~/trash$ cat coucou.hahaha
"coucoublablatest"
et non
"testblablacoucou"
"coucoublablacoucou"

lami20j@debian:~/trash$ egrep '(cou){2}.*test|test.*(cou){2}' coucou.hahaha
"coucoublablatest"
"testblablacoucou"
0