Grep + expression régulière

Résolu
Poireau007 Messages postés 85 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour tout le monde !

Question bête,
est il possible de grepper une expression régulière ??

7 réponses

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

    Mais pourquoi tu dis qu'avec sed ça ne marchera pas?

    Voici deux exemples
    :~$ grep 'www.lemonde.fr/' plop |cut -d'/' -f4 
    voyage-europe 
    voyage-afrique 
    voyage-ameriques 
    service 
    actualite-medias 
    sitemap 
    service 
    service 
    :~$perl -ne 's/www\.lemonde\.fr\/(.*?)\//$1/ and print "$1\n"' plop 
    voyage-europe 
    voyage-afrique 
    voyage-ameriques 
    service 
    actualite-medias 
    sitemap 
    service 
    service


    lami20j
    2
    1. Poireau007 Messages postés 85 Statut Membre 15
       
      Ooocha, la 1ere expression est vraiment terrible !
      je n'ai jamais trop compris comment me servir de cut avec les -c -b -f etc...
      Tu utilises -d puis -f , je n'avais pas compris que ça marchais comme ça, ça fait un peu penser a awk.

      je ne dis pas que ça ne marche pas avec sed, mais ça ne m'a pas l'air très "universel", si demain je passe par un autre code.

      En tout cas merci, je vais essayer d'assimiler ce code pour m'en reservir !
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    ou avec grep -F
    $ echo -e "aaaaaa\n.*\nbbbbbbbb" | grep  '.*'
    aaaaaa
    .*
    bbbbbbbb
    $ 
    $ echo -e "aaaaaa\n.*\nbbbbbbbb" | grep -F '.*'
    .*
    $ 
    1
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      Effectivement ;-)
      0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Seulement avec grep
    :~$ grep -o 'www.lemonde.fr/[^/]*\b' plop |grep -o '/.*'|grep -o '[^/]*'
    voyage-europe
    voyage-afrique
    voyage-ameriques
    service
    actualite-medias
    sitemap
    service
    service
    :~$ grep -o 'www.lemonde.fr/[^/]*\b' plop |grep -o '\b[^/]*$'
    voyage-europe
    voyage-afrique
    voyage-ameriques
    service
    actualite-medias
    sitemap
    service
    service

    1
  4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Ben oui, en échappant les caractères je suppose...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Un regex n'est qu'une suite de caractère qui n'a aucune valeur sans un interpréteur ou en dehors d'un contexte de regex.
    Oui c'est possible
    :~$ cat plop
    /^([+-]?\d+)\s*/
    /^1(?:((??{ $z0 }))1(?{ $z0 = $z1; $z1 .= $^N; }))+$/
    :~$ egrep --color '.*' plop
    /^([+-]?\d+)\s*/
    /^1(?:((??{ $z0 }))1(?{ $z0 = $z1; $z1 .= $^N; }))+$/
    :~$ egrep --color '\\d' plop
    /^([+-]?\d+)\s*/
    :~$ egrep --color '\$.*' plop
    /^1(?:((??{ $z0 }))1(?{ $z0 = $z1; $z1 .= $^N; }))+$/
    :~$ 

    0
  7. Poireau007 Messages postés 85 Statut Membre 15
     
    Merci pour vos réponses,

    je me suis surement mal exprimé, je voulais intégrer une expression régulière dans mon grep (comme un sed dans le grep en fait)

    et non recupérer un motif d'expression regulière.

    Ma question de départ n'est pas claire, dslé !
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      grep -E
      0
    2. Poireau007 Messages postés 85 Statut Membre 15
       
      Salut zipe31,
      l'option -E de grep que tu proposes (qui me semble t-il est l'équivalent de egrep) permet de récupérer une expression si on la connait déjà c'est bien ça ?
      dans mon cas je ne connais pas par avance l'expression que je souhaite récupérer.
      0
  8. Poireau007 Messages postés 85 Statut Membre 15
     
    Ce sera plus clair avec un exemple (bout de code du site lemonde)

    <a href="https://www.lemonde.fr/voyage-europe/">Voyage Europe</a>
    <a href="https://www.lemonde.fr/voyage-afrique/">Voyage Afrique</a>
    <a href="https://www.lemonde.fr/voyage-ameriques/">Voyage Amériques</a>
     | <a href="https://www.lemonde.fr/faq/?question=28465-contacter-redaction-28465" rel="nofollow">Qui sommes-nous ?</a>
     | <a href="https://www.lemonde.fr/actualite-medias/article/2010/11/03/la-charte-d-ethique-et-de-deontologie-du-groupe-le-monde_1434737_3236.html" rel="nofollow">Charte groupe</a>
     | <a href="http://www.lemonde.fr/sitemap/afficher_index/index.html">Index</a>
    
     | <a href="https://www.lemonde.fr/faq/" rel="nofollow">Aide et contact</a>
     | <a href="http://www.mondepub.fr/internet" onclick="window.open(this.href);return false;" rel="nofollow">Publicité</a>
     | <a href="https://moncompte.lemonde.fr/cgv#faq_content_79" rel="nofollow">Abonnements</a>
    </div>
    <p class="dscpt">
       <strong>Journal</strong> d'information en ligne, Le Monde.fr offre à ses visiteurs un panorama complet de l'<strong>actualité</strong>. Découvrez chaque jour toute l'<strong>info</strong> en direct (de la politique à l'économie en passant par le sport et la météo) sur Le Monde.fr, le site de news leader de la presse française en ligne.
    


    je souhaiterais recupérer toutes les occurences de ce type :

    www.lemonde.fr/MON OCCURENCE/....

    donc je souhaiterais récupérer les infos suivantes :

    voyage-europe
    voyage-afrique
    voyage-ameriques
    service
    actualite-medias
    sitemap
    service

    Pour faire cela je voudrais eviter les sed car ma commande ne serais pas réutilisable ailleurs.

    Si cela est possible, je voudrais faire un grep et intégrer dedans l'expression regulière qui me permettrais d'arriver au résultat au dessus.

    Avec un :

    grep .*fr/.*/.*

    j'ai un début de réponse, j'ai toutes les lignes qui m'intéressent, mais malheureusement il me manque les actions :
    supprimer le contenu qui est avant et le contenu qui est après mon pattern
    0