Script bash supprimer des lignes d'un fichier de configuration

[Résolu/Fermé]
Signaler
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
-
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
-
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

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 439
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
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 439
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.
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
Re,

Ok c'est nickel ça marche.
Encore une fois merci Zipe31.
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.
Messages postés
18304
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 octobre 2021
5 416
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 
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.
Messages postés
18304
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 octobre 2021
5 416
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.
Messages postés
18304
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 octobre 2021
5 416
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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 439 >
Messages postés
18304
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 octobre 2021

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
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.