Ajout de texte formaté avec sed

But de la commande : utiliser sed pour ajouter un contenu textuel à un point précis d’un fichier (déterminé par un motif de regexp)

, par clem

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 : 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 :-)