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 :

gerer les commentaires (#) dans le parsing d'un fichier de conf


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 32
    Points : 29
    Points
    29
    Par défaut [RESOLU]gerer les commentaires (#) dans le parsing d'un fichier de conf
    Bonjour,

    Je cherche a automatiser la generation de fichiers de conf et pour cela, je dois parser des fichiers contenant des infos.
    Or pour etre propre, je souhaite commencer par ne pas traiter les lignes commencants par # de facon a pouvoir commenter mon fichier.
    Mais, mes cours de shell sont bien loin, et je n'arrive pas a traiter le # sans mélanger le caractere # et ce qu'il represente en systeme (un truc vide).

    Voici ce que j'ai ecrit pour selectionner les lignes qui m'interressent lors du traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/bin/sh
    while read ligne
    do
    echo $ligne | cut -c 1 | read first_car
     if [ $first_car='#' ]
       then
              echo "$first_car"
       else
              echo ok!
     fi
     
    done  < test.txt
    echo fin
    et le résultat est peu probant car il réagit comme s'il n'y avait que des commentaires d'un part et d'autre part, il sort sur la sortie 7 lignes vides correspondant a mes 7 lignes du fichier de test. Sur lequel poourtant il n'y a que 3 commentaires.

    Quelqu'un a une idée de la marche a suivre svp?

  2. #2
    Lps
    Lps est déconnecté
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 84
    Points : 56
    Points
    56
    Par défaut Astuce
    Si tu veux toutes les lignes, sauf celles débutant par le caractère # :

    Ludovic

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 32
    Points : 29
    Points
    29
    Par défaut testé et approuvé
    Bon, bin c'est effectivement pas mal d'utiliser grep
    Je te remercie bcp.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 32
    Points : 29
    Points
    29
    Par défaut script shell problématique
    Nom du script: generateur de dhcpd.conf

    Compatible avec: Bash

    Descriptif: permet de generer la fin du fichier dhcpd.conf afin de ne pas avoir a editer les hosts systématiquement en parsant un fichier contenant un suite de données sous la forme MAC=XX:XX:XX:XX:XX
    host=nom de l'hote

    Pré-requis:Aucun

    Bon, j'essaye d'avancer, et je galere pas mal.
    j'ai écris ça.
    C'est sans doute pas tres optimisé , et loin d'être parfaitement propre, mais en plus, ca ne marche pas...
    Donc le but ultime sera de generer un bout de fichier contenant les mac et les hosts pour completer /etc/dhcp3/dhcp.conf
    Et déjà, pour commencer, mon test de confirmation d'ecrasement me sort systematiquement si je commente pas le exit 0. (ligne 5)

    Ensuite, je n'arrive pas a comparer ma valeur obtenue par le wc avec le x dans la boucle while (ligne 17)

    Merci a ceux qui auraient deux minutes pour m'aider a redresser mon pov script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    1 #!/bin/sh
    2 echo 'Ce script va écraser le fichier actuel /etc/dhcp3/MAC.conf.'
    3 echo 'Voulez-vous continuer? (O/N, par défaut N)'
    4 read confirmation
    5   if [ $confirmation!=O ]
    6     then
    7 #    exit 0
    8      echo je sors
    9   fi
    10   if [ -f /etc/dhcp3/MAC.conf ]
    11     then
    12     mv /etc/dhcp3/MAC.conf /etc/dhcp3/MAC.conf-old
    13   fi
    14 echo #fichier de conf $date >> /etc/dhcp3/MAC.conf
    15 wc -l test.txt | cut -c 1 | read nbligne
    16 x=0
    17 until [ $x -eq $nbligne ]
    18 do
    19 x=$x+1
    20 grep -v ^# $1 | grep host | colrm 1 5 | read tabhost[$x]
    21 grep -v ^# $1 | grep MAC  | colrm 1 4 | read tabMAC[$x]
    22 
    23 done
    24
    25 echo ${tabhost[*]}
    26 echo ${tabMAC[*]}

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 828
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 828
    Points : 15 251
    Points
    15 251
    Par défaut
    Salut !

    De tête (suis sous Ouinouin, là, peux pas tester...), pour la ligne 5 essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if [ $confirmation != 'O' ] # simple quote, pas sûr
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if [ $confirmation != "O" ] # double quote, probable.
    Et attention à la casse lors de la saisie (mais ça tu le savais déjà, je suppose).
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wc -l test.txt | cut -c 1 | read nbligne
    cela s'ecrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nbligne=$(wc -l test.txt | cut -c 1)
    la nbligne est initialiser avec le nombre de ligne (sur 1 caractere attention)
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 32
    Points : 29
    Points
    29
    Par défaut a tester :)
    Merci a vous deux.

    Pour la casse oui, Jipété j'avais fait attention, et je vais essayer ta version.

    Et MarcG, pour ta syntaxe, il me semblait l'avoir essayé sans succès mais je vais tester des que je rentre au bureau.

    A suivre,

    Merci de votre aide

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2008, 19h49
  2. Réponses: 2
    Dernier message: 02/09/2008, 13h16
  3. Autoriser les commentaires dans une feuille XSD
    Par Pitu45 dans le forum Valider
    Réponses: 1
    Dernier message: 27/08/2008, 09h56
  4. [Sql server 2000] gerer les erreurs dans une procedure
    Par lemagicien dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/03/2008, 21h15
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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