La commande sed permet de prendre le contenu d’un fichier et de l’insérer dans un autre avec la commande r : exemple détaillé
Situation de départ
- tous les fichiers de vhost (situés dans /etc/apache2/sites-available) d’un serveur apache ont en commun d’avoir au moins une directive Directory de la forme :
- pour passer les vhosts en PHP FPM on souhaite ajouter les lignes suivantes après le
</Directory>:
Commande de base
- puisque le contenu à insérer doit conserver le formatage, il n’est pas possible d’utiliser un "simple"
sed 's/à remplacer/le remplacement/g'
on va donc créer un fichier fic.txt qui contiendra le contenu de remplacement. - la commande sed pour modifier le fichier 100_le-site-a-toto.com.conf sera donc :
Détail :
-
-i: option pour modifier le fichier directement -
/<\/Directory>/: l’expression régulière qui est recherchée pour déterminer où doit se faire l’insertion du contenu supplémentaire -
r fic.txt: commande pour l’insertion du contenu du fichier lorsque le motif de l’expression régulière est trouvé
-
Traiter l’ensemble des fichiers du dossier
Une boucle for/do/done va permettre de traiter tous les fichiers du dossier :
Références :
- mémo rapide de toutes les astuces d’écritures de sed : https://www.commentcamarche.net/faq/6699-sed-trucs-et-astuces
- utilisation d’un fichier comme chaîne remplaçante : https://stackoverflow.com/a/26773903
- le fonctionnement détaillé de sed et en particulier de toutes les commandes : https://www.commentcamarche.net/faq/9536-sed-introduction-a-sed-part-i
Mémo : la commande pour 2 remplacements différents en fonction du nombre de tabulations (\t) avant le Directory :
...et hop ! 100 vhost modifiés en une petite commande :-)
