Récupérer une chaine de caractère via GREP, AWK,SED, etc..

Résolu
pcsystemd Messages postés 734 Statut Membre -  
pcsystemd Messages postés 734 Statut Membre -
Bonjour,

Je souhaiterais dans un fichier récupérer la chaine de caractère ci-dessous en gras via une commande comme GREP, AWK, SED ou autre.

207.209.256.5 - - [04/Apr/2022:20:17:48 +0200] "POST /tver_ag/cont_age/<bold>825318531</bold>/ HTTP/1.0" 200 277 "https://www.monsite/agee/825318531/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36"


Merci de votre aide

L'accès au savoir est la première liberté que chaque homme devrait avoir.

4 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk -F "/" '{print $6}' fichier
    825318531
    1
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    $ grep -oP '(?<=/)\d+(?=/)'  fichier | head -1
    825318531
    1
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Bonjour,

    Une autre manière de faire, avec
    sed
    :

    cat fichier | sed -e 's%.*cont_age/\([0-9]*\).*%\1%g


    Explication rapide

    Cette commande signifie "trouve l'entier situé après
    cont_age/
    et n'écrit que cet entier".

    Explication détaillée
    • sed -e 's%motif%remplacement%g'
      signifie qu'on remplace
      motif
      par
      remplacement
      . On pourrait utiliser
      /
      au lieu de
      %
      , mais comme ici notre motif implique lui-même des
      /
      il faudrait les échapper (
      \/
      ) ce qui est faisable mais peu élégant, donc ici on utilise plutôt
      %
      .
    • motif
      est une expression rationnelle. Dans ce langage :
      • .
        signifie n'importe quel caractère,
      • *
        signifie que le motif qui précède peut être répété 0 ou un nombre arbitraire de fois,
      • [0-9]
        désigne n'importe quel caractère ASCII compris entre
        '0'
        et
        '9'
        , ce qui correspond à tous les entiers compris entre
        0
        et
        9
        inclus.
      • [0-9]+
        signifie une répétition arbitrairement longue d'entiers compris entre
        0
        et
        9
        inclus, donc n'importe quel nombre entier.
      • \(...\)
        permet à
        sed
        de capturer une partie du motif. Le bloc ainsi rattrapé est désigné par
        \1
        dans
        remplacement
        . Plus généralement, on peut capturer plusieurs blocs (qui seront numérotés
        \1
        ,
        \2
        ,
        \3
        , ...), et qui peuvent éventuellement être imbriqués.
      • On ajoute
        .*
        en début et fin de
        motif
        pour que
        sed
        prenne bien toute la ligne et que
        \1
        fasse ce qu'il est supposé faire.
    • remplacement
      ne contient que
      \1
      car c'est la seule partie qui nous intéresse.


    Bonne chance
    0
  4. pcsystemd Messages postés 734 Statut Membre 23
     
    Bonjour,

    Merci a vous deux.
    0