Egrep & ET logique

Résolu
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. Webmaster
    Et avc ça ?
    (\<test\>.*\<coucou\>|\<coucou\>.*\<test\>)
    ça reste simple, et ça evite les "coucou coucou", ou autre "test test"

    A plus

    Edit: arf :(
    1. Modérateur
      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"
  2. Modérateur
    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$
    ;-))
    1. 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. Modérateur
        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$
        ;-))
        1. Modérateur
          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 ;-))
        2. Modérateur
          @lami20jJ'ai anticipé au cas ou, peut être pour rien d'ailleurs ;-))
      2. Modérateur
        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
        1. Modérateur
          ;-))