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

Linux Discussion :

lecture et recherche d'expression sur une ligne


Sujet :

Linux

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 13
    Points
    13
    Par défaut lecture et recherche d'expression sur une ligne
    Bonjour

    je travaille sur script qui recherche une expression ET ensuite prendre juste le mot d'après dans un fichier log

    j'ai essayé de commencer avec la position 68 et récupérer ce qui est après mais j'ai toujours la même erreur
    expr: syntax error
    voilà mon script

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/sh
     
    FILE='/var/log/watch.log'
    cat $FILE |
     
    while read line 
     
    do
     
    a=$line
    b=`expr substr $a 68 6`
    echo "\b"
     
     
    done

    voilà j'aimerai rechercher sur une ligne une expression et prendre ce qui la suit par exemple rechercher 'from ' et enregistré l'ip qui suit 'from'

    Merci

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Affiche un exemple de ton fichier et dis nous exactement ce que tu veux récupérer.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    salut zipe
    voilà 3 lignes du fichier log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2012/04/27 16:17:02 duplicate user 'yyyy' from XX.XXX.XXX.5 (current xxx.XXX.XXX.XXX) set to fake (uniq=1)
    2012/04/27 16:17:01 duplicate user 'ZZZZZ' from xxx.XXX.XXX.XXX (current xxx.XXX.XXX.XXX) set to fake (uniq=1)
    2012/04/27 16:17:01 duplicate user 'DDDDDD' from xxx.XXX.XXX.XXX (current xxx.XXX.XXX.XXX) set to fake (uniq=1)
    voilà je veut recupérer le user yyyy et ces deux ip sur chaque ligne
    ensuite par exemple bannir la première ip avec iptables et afficher tous sur un fichier log comme historiques
    voilà j'espère que c'est clair
    merci pour ton aide

  4. #4
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat fic 
    2012/04/27 16:17:02 duplicate user 'yyyy' from 82.125.28.5 (current 85.251.102.55) set to fake (uniq=1)
    2012/04/27 16:17:01 duplicate user 'ZZZZZ' from 123.122.121.120 (current 90.11.222.65) set to fake (uniq=1)
    2012/04/27 16:17:01 duplicate user 'DDDDDD' from 145.78.100.11 (current 222.145.82.124) set to fake (uniq=1)
     
    $ grep 'yyyy' fic | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
    82.125.28.5
    85.251.102.55
     
    $

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci zipe je vais testé tous ça mais avant ça stp explique moi cette commande je veut bien comprendre si t as le temps biensur
    j aimerai comprendre ce que j ecris
    et le user il est variable donc je doit le recupéré aussi du fichier log oui je sais je demande trop (hihihi)

    merci encore zipe

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    à comprendre comme
    lire les lignes contenant yyyy seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
    à comprendre comme
    seulement conserver les champs constitués de 3 séquences de 1 à 3 chiffres +"." chacune & suivi d'encore 3 chiffres.
    donc potentiellement de 0.0.0.0 à 999.999.999.999


    [0-9] n'importe quel chiffre
    [0-9]{3} = 3 chiffres donc entre 001 & 999 (mais les deux premiers sont pas présent donc il faut changer de méthode)
    [0-9]{1,3} = 1 à trois chiffres donc de 1 à 999
    \. = le caractère "."
    ". "tout seul = signifierai n'importe quel caractère c'est pourquoi la distinction avec \. existe.

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'yyyy' fic | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
    grep 'yyyy' fic
    Bon ça c'est le B.A. BA de grep. On cherche la ligne contenant le motif "yyyy" dans le fichier "fic"

    egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
    egrep (ou grep -E), c'est pour interpréter les expressions régulières étendues (voir man grep).
    Le "-o" c'est pour ne récupérer que la partie de la ligne qui correspond exactement à l'expression régulière.

    ([0-9]{1,3}\.){3}
    Correspond à un, deux ou trois chiffre(s) ({1,3}) compris dans l'intervalle [0-9], qui est/sont suivi(s) d'un point (\.) et ce trois fois de suite ({3})

    [0-9]{1,3}
    Puis un, deux ou trois chiffre(s) ({1,3}) compris dans l'intervalle [0-9] pour finir.


    le user il est variable donc je doit le recupéré aussi du fichier log
    Faudrait savoir ??? Dans ton post précédent tu demandais justement, je cite "je veut recupéré le user yyyy et ces deux ip"

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    merci beaucoup pour ces précisions
    Faudrait savoir ??? Dans ton post précédent tu demandais justement, je cite "je veut recupéré le user yyyy et ces deux ip"
    'yyyy' etait un exemple vous voyez bien que les user change sur les lignes donc je veux récupéré le user qui se trouve entre ' ' aussi

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ egrep -o "'[^']*'|([0-9]{1,3}\.){3}[0-9]{1,3}" fic  | sed "N;N;s/\n/ = /g;s/'//g"
    yyyy = 82.125.28.5 = 85.251.102.55
    ZZZZZ = 123.122.121.120 = 90.11.222.65
    DDDDDD = 145.78.100.11 = 222.145.82.124
     
    $

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    merci beaucoup sa marche impeccable

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/09/2014, 22h07
  2. Recherche d'un nombre sur une ligne dans un tableau evolutif
    Par yann26 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/06/2014, 12h12
  3. Rechercher plusieurs occurence sur une ligne
    Par trall dans le forum Débuter
    Réponses: 3
    Dernier message: 03/01/2010, 15h02
  4. Recherche dans Grid et focus sur une ligne dans grid
    Par angelevil dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/05/2009, 00h37
  5. Listbox recherche sur une ligne
    Par bavmorda1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/02/2008, 15h59

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