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 :

Détection de la première ligne vide à partir d'une ligne n


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut Détection de la première ligne vide à partir d'une ligne n
    Bonjour à tous,

    J'ai un réel souci avec la détection d'une ligne vide dans un fichier de configuration du serveur samba /etc/samba/smb.conf. Je vous joins en pièce jointe le fichier que j'utilise (fichier type), dans le cas où vous n'auriez pas installé samba sur votre machine.

    Mon script fonctionne correctement sur n'importe quel fichier mais pas sur celui de samba. Le fonctionnement du script est de rechercher la chaine de caractères "[homes]", de récupérer le numéro de ligne correspondant et d'ajouter à la première ligne vide détectée en dessous de [homes] une chaine de caractères... Le problème est qu'il ne détecte pas la ligne vide et continue jusqu'à la fin du fichier.

    Voici mon 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
    #!/bin/bash
     
    fichier=/etc/samba/smb.conf
     
    numero=`sed -n "/\[homes\]/=" $fichier`
    texte=`sed -n "$numero p" $fichier`
     
    while [ -z "$texte" ]; do
            numero=$(( ${numero} + 1 ))
            texte=`sed -n "$numero p" $fichier`
            echo $numero
            echo $texte 
    done
     
    numero=$(( ${numero} + 1 ))
    sed -i $numero'iINSERTION_LIGNE\n' $fichier

    Pour info, la pièce jointe est en .txt mais en .conf à l'origine...
    Çà fait deux jours que je suis dessus et je n'ai pas trouvé la solution à ce bug
    Merci beaucoup pour votre aide.
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt smb.txt (10,0 Ko, 124 affichages)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    ton fichier est au format windows
    voir ici
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Merci pour ton aide...

    Alors j'ai procédé comme tu me l'as suggéré à convertir mon fichier smb.conf via la commande :

    find /etc/samba -type f -name "smb.conf" -exec sed -i -e "s/\x0D$//g" {} \;

    Mais l'erreur persiste... quand je lance de nouveau mon script, l'insertion de la chaine "INSERTION_LIGNE" se mets juste en dessous de [homes]. Du coup j'en déduis qu'il ne rentre pas dans ma boucle. Pourtant tout semple correcte à ce niveau. Pour info quand j'ajoute un cat -A /etc/samba/smb.conf à mon script pour voir les éventuels caractères cachés, j'obtiens ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [homes]$
    ^Icomment = Home Directories$
    ^Ibrowseable = no$
    ^Iwritable = yes$
    ;^Ivalid users = %S$
    ;^Ivalid users = MYDOMAIN\%S$
    $
    [public]$
    ^Icomment = Repertoire public$
    ^Ipath = /public$
    ^Iwritable = yes$
    ^Ipublic = yes$
    ^Ibrowseable = yes$
    Une idée?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé

    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
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/\[homes\]/{:z;n;/^$/! bz; s/.*/\tINSERTION_LIGNE\n/}' /etc/samba/smb.conf
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/\[homes\]/,/^$/{/^$/ s/.*/\tINSERTION_LIGNE\n/}' /etc/samba/smb.conf

  6. #6
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Tu penses que je ne reçois pas correctement ma chaine dans ma variable? ce qui empêcherait un bon fonctionnement au niveau de la boucle?

    car sinon je ne vois pas trop ce que tu voulais me faire comprendre via le lien précédent... désolé

  7. #7
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Merci Zipe31,

    j'ai ajouté -i pour faire la modification dans mon fichier. Du coup la commande devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/\[homes\]/,/^$/{/^$/ s/.*/\nINSERTION_LIGNE\n/}' $fichier
    et çà fonctionne parfaitement

    Maintenant faut passer en mode compréhension

    Merci à vous deux.

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

Discussions similaires

  1. [XL-2010] Suppression d'une ligne dont les cellules sont vides à partir d'une certaine colonne
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2015, 13h54
  2. Réponses: 6
    Dernier message: 08/04/2013, 17h36
  3. Réponses: 1
    Dernier message: 23/07/2011, 11h50
  4. Réponses: 1
    Dernier message: 03/01/2011, 14h01
  5. [VBA-E]Selection d'une ligne a partir d'une certaine colonne
    Par deathsurfer dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/06/2006, 16h36

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