IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Utilisation d'une expression régulière dans un AWK


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Utilisation d'une expression régulière dans un AWK
    Bonjour,

    J'ai un fichier de "log" comme ceci (obtenu grâce à Nmap):

    ----------------------
    127.0.0.1
    22
    68
    ----------------------
    127.0.0.1
    22
    25
    587
    68
    ----------------------
    127.0.0.1
    25
    587
    68
    Il contient les résultats de chaque scans : les adresses IP trouvées, et pour chacune, les ports ouverts.
    Chaque scan est séparé par "----------------------" (22 tirets).

    Pour exploiter ce fichier, je ne veux récupérer que le dernier "bloc".
    Je le fais de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    lecture_bloc(){
    	awk 'BEGIN { RS=""
    		FS="^----------------------"} 
    		{print $NF} ' $FICHIER_LOG # on découpe le fichier suivant les pointillés, et on prend le dernier bloc	
    }
    tableau=($(lecture_bloc ))
    Or, je modifie légèrement le fonctionnement de mon fichier de logs en ajoutant la date de chaque scans :

    ---------------------- 09/08/2013 10h12
    127.0.0.1
    25
    587
    68
    ---------------------- 10/08/2013 15h45
    127.0.0.1
    22
    25
    587
    68
    Le problème est que quand je lance maintenant la lecture du bloc, je récupère dans les premières cases de mon tableau, la date et l'heure.

    10/08/2013 15h45 127.0.0.1 22 25 587 68
    Y aurait-t-il une solution pour modifier la variable "FS" de AWK et ainsi lire toute la ligne au lieu d'uniquement le motif indiqué ?

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lecture_bloc(){
    	awk 'BEGIN { RS=""
    		FS="^----------------------"} 
    		{print $NF} ' $FICHIER_LOG
    }
    Je souhaite évidement éviter de faire un "unset" des 2 premières cases de mon tableau !

    Merci.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 471
    Points
    19 471
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    awk 'BEGIN {RS=""; FS="-{22}[^\n]*\n"} {print $NF}' fichier
    127.0.0.1
    22
    25
    587
    68

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Merci ! j'ai trouvé
    (oui j'ai juste remplacé le "*" par un "+", mais tu m'as mis sur la bonne piste !).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    awk 'BEGIN { RS=""
    		FS="----------------------[^\n]+\n"}
    		{print $NF}' fichier
    Bizarrement le "-{22}" ne fonctionne pas ...
    Pas grave, merci !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par Nattiz Voir le message
    Bizarrement le "-{22}" ne fonctionne pas ...
    Pas grave, merci !
    Pour certaines versions de awk, il faut activer l'option --re-interval pour qu'il accepte les quantificateurs.


    -r
    --re-interval
    Enable the use of interval expressions in regular expression matching (see Regular Expressions, below). Interval expressions were not tradi‐
    tionally available in the AWK language. The POSIX standard added them, to make awk and egrep consistent with each other. They are enabled by
    default, but this option remains for use with --traditional.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/07/2012, 15h05
  2. Réponses: 9
    Dernier message: 28/05/2011, 15h47
  3. Réponses: 13
    Dernier message: 30/06/2010, 15h23
  4. Utilisation de variables dans une Expression régulière
    Par Bonjovi51 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2008, 11h19
  5. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo