Salut,
je cherche le moyen de supprimer des lignes dans un fichier, en fait je voudrais supprimer un virtualhost apache avec un simple script shell mais apparemment je n’y arrive pas.
Le fichier des virtualhost apache rassemble plusieurs virtualhost en commençant par
Je voudrais simplement lancer un script qui efface le virtualhost qui correspond au pseudo que j’ai indiqué en variable $USER
donc si j’indique dans le script le pseudo toto et bien il me supprime le virtualhost qui correspond à toto.domain.com
Bref, je voudrais qu’il supprime tout le bloc (de à ), quand le pseudo correspond. Note: le nombre de lignes dans le bloque du vhost est fixe.
Est-ce que c’est possible ? et si oui quelles sont les commandes à utiliser.
merci de votre aide.
#!/bin/sh
echo "Quel VirtualHost voulez-vous supprimer ? : "
read USER
sed -i '/<VirtualHost/{:a; N; /<\/VirtualHost/!ba; /'$USER'\.domaine.com/d}' /root/test.conf
exit 0
mais le bloque n’est pas supprimé
J’ai testé ta commande en indiquant le nom du fichier et
il m’affiche le fichier complet dans la console (sdout)
Suppression des lignes de DEB_LIGNE jusqu’au premier VirtualHost trouvé
sed -i "$DEB_LIGNE,/</VirtualHost>/"d $FICHIER[/code]
Tu avais remplace le $1 du awk par $USER, le $1 du awk n’a rien avoir avec l’argument passé au script. Il dit de n’afficher que la premiere valeur avant le “:”.
Dans le sed, tu avais mis des cote simple au lieu des cote double. Si tu met des cote simple le $DEB_LIGNE ne renvoie pas ca valeur et tu avais oublie la virgule entre les deux valeurs qui signifie de $DEB_LIGNE à sinon ca signifie de remplacer $DEB_LIGNE par .
Suppression des lignes de DEB_LIGNE jusqu’au premier VirtualHost trouvé
sed -i "$DEB_LIGNE,/</VirtualHost>/"d $FICHIER
exit 0[/code]
Tu avais remplace le $1 du awk par $USER, le $1 du awk n’a rien avoir avec l’argument passé au script. Il dit de n’afficher que la premiere valeur avant le “:”.
Dans le sed, tu avais mis des cote simple au lieu des cote double. Si tu met des cote simple le $DEB_LIGNE ne renvoie pas ca valeur et tu avais oublie la virgule entre les deux valeurs qui signifie de $DEB_LIGNE à sinon ca signifie de remplacer $DEB_LIGNE par .