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 :

[SED] Automatisation de gestion d'un fichier de configuration Samba


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut [SED] Automatisation de gestion d'un fichier de configuration Samba
    Bonjour à tous,

    Je me casse un peu la tête sur l'automatisation de la gestion d'un fichier de configuration Samba.
    Par exemple, dans la conf suivante :

    [Foo]
    comment = "Partage de Foo"
    path = /home/Foo
    browseable = Yes
    read only = yes
    read list = @Foo
    write list = @Foo
    valid users = @Foo
    create mode = 0770
    directory mode = 0770
    force create mode = 0770

    [Bar]
    comment = "Partage de Bar"
    path = /home/Bar
    browseable = Yes
    read only = yes
    write list = @Bar
    valid users = @Bar
    create mode = 0770
    directory mode = 0770
    force create mode = 0770
    Je souhaite effacer toutes les lignes concernant le partage de [Foo]. Je pensais le faire avec Sed, mais je ne trouve pas la bonne syntaxe pour dire "efface à partir de [Foo] jusqu'à avant le [ de [Bar]". Je n'utilise pas souvent SED et je ne maîtrise pas les expressions régulières.

    Merci pour votre aide.

    Tiki

  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,

    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
    $ cat foobar 
    [Foo]
    comment = "Partage de Foo"
    path = /home/Foo
    browseable = Yes
    read only = yes
    read list = @Foo
    write list = @Foo
    valid users = @Foo
    create mode = 0770
    directory mode = 0770
    force create mode = 0770
     
    [Bar]
    comment = "Partage de Bar"
    path = /home/Bar
    browseable = Yes
    read only = yes
    write list = @Bar
    valid users = @Bar
    create mode = 0770
    directory mode = 0770
    force create mode = 0770
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed '/\[Foo\]/,/^$/d' foobar 
    [Bar]
    comment = "Partage de Bar"
    path = /home/Bar
    browseable = Yes
    read only = yes
    write list = @Bar
    valid users = @Bar
    create mode = 0770
    directory mode = 0770
    force create mode = 0770

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    @zipe31 :

    Woah, merci. C'est super malin d'avoir pensé à utiliser ",/^$".
    Si je ne me trompe pas, cela signifie "la ligne vide suivante". Est-ce bien ça ?

    En général, mes fichiers de conf sont assez aéré et il existe un espace vide entre chaque section.
    Mais dans l'hypothèse où les section seraient collées (sans ligne vide), il existe une solution ?

    Tiki

  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
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $ cat foobar 
    [Foo]
    comment = "Partage de Foo"
    path = /home/Foo
    browseable = Yes
    read only = yes
    read list = @Foo
    write list = @Foo
    valid users = @Foo
    create mode = 0770
    directory mode = 0770
    force create mode = 0770
    [Bar]
    comment = "Partage de Bar"
    path = /home/Bar
    browseable = Yes
    read only = yes
    write list = @Bar
    valid users = @Bar
    create mode = 0770
    directory mode = 0770
    force create mode = 0770
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed  '/\[Foo\]/{:z;N;/\]$/!bz;s/.*\n//}' foobar 
    [Bar]
    comment = "Partage de Bar"
    path = /home/Bar
    browseable = Yes
    read only = yes
    write list = @Bar
    valid users = @Bar
    create mode = 0770
    directory mode = 0770
    force create mode = 0770

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Alors là, je sèche complètement sur la syntaxe. Mais ça me donne un sujet d'étude. Encore Merci.

    Tiki

  6. #6
    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
    Quand le motif est trouvé, on applique les commandes qui se trouvent entre les accolades.

    On pose un étiquette pour s'y brancher ultérieurement.

    On ajoute la ligne suivant dans la mémoire principale de sed. Chaque ligne dans la mémoire tampon sera séparée par le caractère "\n"

    Si la ligne ne se termine pas par un crochet fermant, (le signe $ représente la fin de la ligne et le point d'exclamation la négation), on se branche à l'étiquette et on recommence…

    Quand l'expression précédente trouve un crochet fermant, on applique la commande de substitution qui supprime tout depuis le début de la ligne jusqu'à ce qu'elle rencontre le dernier caractère "\n" (= saut de ligne).

    Fin des commandes correspondants aux motif.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Si gnu sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -z 's/\[Foo\][^[]*//' fichier
    Mais en principe, les fichiers de conf de ce type doivent respecter un format, qui est une ligne vide en tant que fin de paragraphe...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    @zipe31 : Merci pour l'explication, j'ai tout compris.
    @disedorgue : Merci pour ta syntaxe tout à fait claire. Tu as tout à fait raison pour le saut de ligne. Et c'est comme ça que je configure. Mais voilà, je ne suis pas le seul à intervenir sur la conf, et je ne repasse pas après les autres. Cependant, et globalement, tout le monde est assez respectueux. Donc je mets les défauts de sauts de ligne sur le compte de la maladresse. Sauf que dans le cas du l'automatisation, avec une syntaxe inadéquate de SED, cela pourrait devenir problématique.
    Comme je comprends mieux la première syntaxe si je devais l'expliquer, j'ai revu ma conf et j'ai corrigé les défauts. Il y en avait peu.

    Merci encore pour tout.

    Tiki

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Tiki10 Voir le message
    @disedorgue : Tu as tout à fait raison pour le saut de ligne. Et c'est comme ça que je configure. Mais voilà, je ne suis pas le seul à intervenir sur la conf, et je ne repasse pas après les autres. Cependant, et globalement, tout le monde est assez respectueux. Donc je mets les défauts de sauts de ligne sur le compte de la maladresse. Sauf que dans le cas du l'automatisation, avec une syntaxe inadéquate de SED, cela pourrait devenir problématique.
    Du coup, ce serait peut-être une bonne idée que l'automatisation prenne en compte la possibilité de non-respect des sauts de lignes et corrige le formatage, non?

    Par exemple, avant de supprimer les lignes demandées, il n'est pas très compliqué de "corriger" le formatage du fichier, en demandant à "sed" de vérifier que chaque ligne contenant "^\[.*\]$" est bien précédée d'une ligne vide, et, si besoin, d'en ajouter une. (ceci est laissé en exercice au lecteur...)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    @jack-ft : C'est tout à fait juste. Je dispose d'assez d'éléments pour envisager de le faire seul. Merci pour le conseil.

    Tiki

Discussions similaires

  1. [Débutant] Gestion d'un fichier de configuration avec des collections imbriquées
    Par tarzan68 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 15/07/2019, 17h18
  2. [Débutant] Automatiser la lecture d'un fichier de configuration
    Par Longrais dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 08/12/2006, 11h31
  3. [vb.net] gestion d un fichier de configuration
    Par rangdalf dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/02/2006, 14h24
  4. Réponses: 7
    Dernier message: 05/08/2005, 16h32
  5. Réponses: 8
    Dernier message: 06/07/2004, 14h17

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