Script bash supprimer des lignes d'un fichier de configuration

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai créé un script bash pour configurer le fichier de configuration Samba afin d'ajouter un partage sur chacun de mes postes Linux.
echo "" | sudo tee -a $nom_fichier_configuration_samba
echo "" | sudo tee -a $nom_fichier_configuration_samba
echo "[tmp]" | sudo tee -a $nom_fichier_configuration_samba
echo "# Partage classique temporaire du dossier /tmp avec lecture/ecriture sans mot de passe et s'efface automatiquement à l'arrêt du PC" | sudo tee -a $nom_fichier_configuration_samba
echo "comment = Partage temporaire s'efface a l'arrêt du pc" | sudo tee -a $nom_fichier_configuration_samba
echo "path = /tmp/partage_temporaire" | sudo tee -a $nom_fichier_configuration_samba
echo "read only = no" | sudo tee -a $nom_fichier_configuration_samba
echo "public = yes" | sudo tee -a $nom_fichier_configuration_samba


Maintenant je voudrais supprimer le partage directement dans le fichier configuration de Samba /etc/samba/smb.conf ce qui suit :
[tmp]
# Partage classique temporaire avec lecture / ecriture sans mot de passe
comment = Partage temporaire s'efface a l'arrêt du pc
path = /tmp/partage_temporaire
read only = no
public = yes


J'ai essayé de supprimer la ligne :
[tmp]

comme ceci :
sudo sed '/[tmp]/d' /etc/samba/smb.conf

mais ça marche pas.

Comment puis-je faire ?

Merci.

7 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Si tu connais exactement le nombre de ligne qui suivent '[tmp]' :
    sed '/\[tmp\]/,+5d' smb.conf 

    Si tu ne les connais pas et qu'il y a une ligne vide entre chaque section de tes partages :
    sed '/\[tmp\]/,/^$/d' smb.conf
    0
  2. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonsoir Zipe31,

    Etes-vous sûre et certain.
    j'ai fait ceci :
    sudo sed '/\[tmp\]/,/^$/d' /etc/samba/smb.conf

    Et il y a toujours la section "tmp" dans le fichier ?

    Merci.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oui j'en suis sûr, par contre comme toujours avec sed, je ne donne jamais le code modifiant le fichier directement ;-\

      Après avoir testé la syntaxe ET constaté de visu (dans le terminal) qu'elle fonctionne bien, il faut rajouter le paramètre "-i" à la commande :
      sudo sed -i.BAK '/\[tmp\]/,/^$/d' /etc/samba/smb.conf


      Le .BAK n'est là que pour créer une copie de sauvegarde et n'est pas obligatoire. S'il est omis, penser à faire une copie du fichier à modifier.
      0
  3. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Ok c'est nickel ça marche.
    Encore une fois merci Zipe31.
    0
  4. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    J'ai eu un problème avec un fichier dans "/etc/init.d/", j'ai du tout changer pour pouvoir activer ou désactiver le fichier au démarrage du pc.

    Dans le fichier /etc/rc.local j'ai ceci
    laurent@Laurent-Bureau:~$ cat /etc/rc.local
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    exit 0

    il faut que soit j'ajoute ou supprime la ligne "/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh" avant la ligne "exit 0".

    Mes deux questions :
    1/ Comment ajouter ceci "/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh" avant "exit 0" ?
    2/ Comment supprimer ceci "/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh" avant "exit 0".

    Le "exit 0" doit toujours rester à la fin du fichier.

    Merci.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      ajouter le -i pour modifier le fichier
      ajouter
      $ sed '$i/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh'  fichier 

      supprimer
      $ sed '/creer-un-dossier-temporaire-dans-tmp.sh/d'  fichier 
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    Quand je veux supprimer la ligne
    "/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh" dans le fichier "/etc/rc.local", je fais :
    laurent@Laurent-Bureau:~$ echo "suppression" ; sudo  sed '/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh/d' /etc/rc.local        
    suppression
    [sudo] password for laurent:
    no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    nit.d/creer-un-dossier-temporaire-dans-tmp.sh/d
    /etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh

    exit 0
    laurent@Laurent-Bureau:~$


    Et quand je vérifie le contenu du fichier, il y a toujours la ligne "/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh" ?

    laurent@Laurent-Bureau:~$ echo "Lecture contenu fichier" ; cat /etc/rc.local
    Lecture contenu fichier
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    /etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh

    exit 0
    laurent@Laurent-Bureau:~$


    Merci.
    0
  7. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,*

    J'ai du mal à utiliser sed et je le trouve compliqué.
    J'ai déjà sauvegardé le fichier avant toute modification.

    quand je fait ceci :
    laurent@Laurent-Bureau:~$ sudo sed '/\/etc/init.d/creer-un-dossier-temporaire-dans-tmp.s\h/,/^$/d' /etc/rc.local
    [sudo] password for laurent:
    no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    nit.d/creer-un-dossier-temporaire-dans-tmp.sh/,/^$/d
    /etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh

    exit 0
    laurent@Laurent-Bureau:~$


    Contenu du fichier :
    laurent@Laurent-Bureau:~$ cat  /etc/rc.local
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    /etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh

    exit 0
    laurent@Laurent-Bureau:~$


    Merci.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      il faut protéger tous les /
      sed '/\/etc\/init.d\/creer-un-dossier-temporaire-dans-tmp.sh/d'  fichier

      sans sed, mais il faut passer par une copie du fichier
      grep -v '/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh'  fichier > nouveau-fichier
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Salut,
        il faut protéger tous les /
        Ou dire à sed que le délimiteur a changé (seul le 1er doit être protégé) :

        sed '\#/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh#d' fichier


        Cette syntaxe n'est bonne que pour les motifs, pour la commande de substitution on définit le caractère délimiteur directement, sans devoir le protéger.
        sed 's#bla#plop#' fichier


        Voir la FAQ sur sed
        0
  8. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Ok jy suit arrivé.

    Pour insérer :
    sudo sed -i.NOUV '$i/etc/init.d/creer-un-dossier-temporaire-dans-tmp.sh' /etc/rc.local


    Pour supprimer :
    sudo sed -i.NOUV '/\/etc\/init.d\/creer-un-dossier-temporaire-dans-tmp.sh/d' /etc/rc.local


    Il faut mettre à chaque fois "Sed -i. NOUV" avant, c'est ce que je n'avais pas compris

    Merci.
    0