Utilisation de sed pour mettre en commentaire - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 20-04-2008 à 16:22:45
En effet tu choisis pas l'outil le plus simple
Soit le fichier de config suivant :
<blabla> |
Je veux, pour toutes les lignes allant de :
<Anonymous /home/anonymous_ftp/uploads> |
à
</Anonymous> |
remplacer ces dites lignes par "la même chose précédée d'un #"
1. Pour détecter la première ligne, on va chercher "<Anonymous" (libre à toi d'être plus précis), dans sed ca se dit :
/<Anonymous/ |
Bref ca s'écrit en mettant le motif de recherche entre deux "/"
2. Pour la dernière ligne de la partie qui nous intéresse, on va chercher "</Anonymous", dans sed ca se dit :
/<\/Anonymous/ |
Ici je suis obligé de protéger le / de "</Anonymous" sinon sed croira que le motif de recherche se termine là. Donc je le protège (et pour protéger un caractère c on écrit \c, donc ici ca fait un joli \/)
Sur toutes les lignes entre 1. et 2., je veux remplacer "la ligne" par "#la ligne", donc je fais en sed :
s/^/#/ |
Ce qui se lit s (substitue) / truc qu'on cherche / truc qu'on veut mettre à la place /
Ici : s / ^ (marqueur invisible de début de ligne) / # (ben le caractère #) /
D'où la commande finale :
sed '/<Anonymous/ , /<\/Anonymous/ s/^/#/' mon_fichier |
Qui produit :
|
Problème : ca va s'appliquer de la PREMIERE ligne contenant "<Anonymous" à la DERNIERE ligne contenant "</Anonymous". Donc si ton fichier a plusieurs blocs de ce genre, il faudra être plus fin.
Comment ? C'est pas dur d'augmenter la précision sur la 1ere ligne car on a un /home/truc/bidule sans doute unique, mais sur la dernière c'est plus dur car a priori tous les </Anonymous>.
Bilan : c'est possible mais pas évident sous sed.
Marsh Posté le 21-04-2008 à 08:20:13
Dans l'exemple de Xavier_OM, on voit que le bloc à commenter est entre la ligne 5 et 12. Étant donné que les évolutions d'un fichier de conf sont censées être maîtrisés par l'administrateur, on peut se permettre de se servir du numéro de ligne comme référence:
sed -e ' 5,12 s/^/#/g' fichier.txt |
|
Marsh Posté le 19-04-2008 à 20:27:11
Bonjour à tous
Voila je travaille sur un script qui permettrait de commenter/décommenter les lignes d'un fichier de configuration (par exemple, le fichier de configuration de proftpd).
J'aimerais utiliser la commande sed pour cela, seulement voilà, mon probleme est que je trouve cette commande tres tres complexe
Voici la situation, j'ai par exemple à la fin de mon fichier de conf les lignes suivantes :
J'aimerais donc les commenter en ajoutant un # en début de chaque ligne de bloc... Comment pourrais-je m'y prendre ??
Je vous en remercie d'avance