Egrep & ET logique

Résolu
gunbol Messages postés 52 Statut Membre -  
lami20j Messages postés 21506 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.
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. gunbol Messages postés 52 Statut Membre 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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      ;-))
      0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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