Script bash supprimer des lignes d'un fichier de configuration

Résolu/Fermé
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - Modifié par xunil2003 le 22/03/2015 à 15:05
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - 25 mars 2015 à 18:19
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.

A voir également:

7 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
22 mars 2015 à 15:06
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
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 22/03/2015 à 15:25
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
22 mars 2015 à 15:30
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
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
22 mars 2015 à 16:48
Re,

Ok c'est nickel ça marche.
Encore une fois merci Zipe31.
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
24 mars 2015 à 22:48
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
25 mars 2015 à 10:44
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
25 mars 2015 à 12:51
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
25 mars 2015 à 13:51
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 25/03/2015 à 14:50
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
Modifié par dubcek le 25/03/2015 à 16:31
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024
25 mars 2015 à 17:43
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
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
25 mars 2015 à 18:19
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