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

Résolu/Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - Modifié le 8 avril 2022 à 17:27
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 3 mai 2022 à 08:16
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

A voir également:

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
6 avril 2022 à 17:51
hello
$ awk -F "/" '{print $6}' fichier
825318531
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 7 avril 2022 à 12:52
$ grep -oP '(?<=/)\d+(?=/)'  fichier | head -1
825318531
1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 8 avril 2022 à 17:39
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
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
3 mai 2022 à 08:16
Bonjour,

Merci a vous deux.
0