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 :

Parseur en shell


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut Parseur en shell
    Bonjour,
    Je débute en shell. Dans le cadre d' un stage je doit réaliser un parseur en shell qui sépare les information d'un log apache par des ' | ', en les copiant dans un autre fichier.
    Voici un exemple d' une ligne du log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    127.0.0.1 - - [21/May/2008:10:48:26 +0200] "GET /apache2-default/mon.gif?nom=dupont&prenom=christopher&age=19&date=1989-09-05 HTTP/1.1" 304 - "http://127.0.0.1/apache2-default/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20071008 Ubuntu/7.10 (gutsy) Firefox/2.0.0.6"
    Pour séparé j'ai choisi d'utiliser la commande sed.
    J'ai réussi à séparer l'adresse ip en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/ \- \- \[/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    La première partie de la commande testé en console marche bien et remplace bien les '- - [ 'par un '|', mais j'ai un petit problème, je n'ai pas de fichier access.tmp
    Je ne trouve pas la solution à ce problème, j' utilise sûrement mal la commande.
    Une âme charitable pourrais m'aider s'il vous plaît .
    Merci d'avance,

    Petit edit, quand je test juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/ \- \- \[/\|/g" access.log > access.tmp
    Ca remplasse et ca copie en créant le fichier access.tmp
    mais quand je lance avec mon script plusieurs commandes ça ne marche pas.

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par Mokujil Voir le message
    .../...
    mais quand je lance avec mon script plusieurs commandes ça ne marche pas.
    Si tu postais le script avec les commandes, ce serait plus facile pour t'aider

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    Voilà mon script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    echo "Execution du script"
     
    sed -e "s/ \- \- \[/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ \+0200\] \"GET \/apache2\-default\/mon\.gif\?nom\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ \+0200\] \"GET \/apache2\-default\/ HTTP\/1\.1\" 304 \- \"http\:\/\/127\.0\.0\.1\/\" \"Mozilla\/5\.0 \(X11\; U\; Linux i686\; en\-US\; rv\:1\.8\.1\.6\) Gecko\/20071008 Ubuntu\/7\.10 \(gutsy\) Firefox\/2\.0\.0\.6\"/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&prenom\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&age\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&date\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ HTTP\/1\.1\" 304 \- \"http\:\/\/127\.0\.0\.1\/\" \"Mozilla\/5\.0 \(X11\; U\; Linux i686\; en\-US\; rv\:1\.8\.1\.6\) Gecko\/20071008 Ubuntu\/7\.10 \(gutsy\) Firefox\/2\.0\.0\.6\"/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    Dans mon access.log ca remplace les ip par des ' | ', par contre toutes les autres ne marchent pas. Je ne sais pas si j'ai oublié d'échapper des caractères spéciaux ou pas. Ou alors si j'ai oublié quelque chose.
    Merci,

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mokujil Voir le message
    Voilà mon script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    echo "Execution du script"
     
    sed -e "s/ \- \- \[/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ \+0200\] \"GET \/apache2\-default\/mon\.gif\?nom\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ \+0200\] \"GET \/apache2\-default\/ HTTP\/1\.1\" 304 \- \"http\:\/\/127\.0\.0\.1\/\" \"Mozilla\/5\.0 \(X11\; U\; Linux i686\; en\-US\; rv\:1\.8\.1\.6\) Gecko\/20071008 Ubuntu\/7\.10 \(gutsy\) Firefox\/2\.0\.0\.6\"/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&prenom\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&age\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/\&date\=/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    sed -e "s/ HTTP\/1\.1\" 304 \- \"http\:\/\/127\.0\.0\.1\/\" \"Mozilla\/5\.0 \(X11\; U\; Linux i686\; en\-US\; rv\:1\.8\.1\.6\) Gecko\/20071008 Ubuntu\/7\.10 \(gutsy\) Firefox\/2\.0\.0\.6\"/\|/g" access.log > access.tmp && mv -f access.tmp access.log
    Dans mon access.log ca remplace les ip par des ' | ', par contre toutes les autres ne marchent pas. Je ne sais pas si j'ai oublié d'échapper des caractères spéciaux ou pas. Ou alors si j'ai oublié quelque chose.
    Merci,
    Pour les échappements oubliés, je sais pas trop (en fait j'ai pas vraiment le temps d'analyser tes regex). En revanche, tu peux éviter toutes ces opérations "au coup par coup" en écrivant à chaque fois dans access.tmp (long long long)

    Pour résumer, tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed "machin" access.log >access.tmp && mv access.tmp access.log
    sed "truc" access.log >access.tmp && mv access.tmp access.log
    sed "chose" access.log >access.tmp && mv access.tmp access.log
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "machin" -e "truc" -e "chose" access.log >access.tmp && mv access.tmp access.log
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    Ahh, tu m'apprend un truc très utile Merci beaucoup, ça m'évitera de me prendre la tête à l'avenir.
    Edit: Je viens de tester ce matin. Et le résultat est positif, vu qu' le nom=, date=, et age= on été supprimé.
    Pour le reste je pense qu c'est une erreur des échappement.
    Merci beaucoup encor. Problème résolu

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

Discussions similaires

  1. [debutant???] Parseur & portabilté
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 24/07/2003, 13h20
  2. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07
  3. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  4. Réponses: 3
    Dernier message: 04/09/2002, 09h42
  5. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39

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