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. 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,

      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
        ;-))
    2. 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 ;-))
    3. 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. 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"