En effet tu choisis pas l'outil le plus simple
Soit le fichier de config suivant :
<blabla>
truc
</blabla>
<Anonymous /home/anonymous_ftp/uploads>
User ftp
Group nogroup
UserAlias anonymous ftp
MaxClients 10
RequireValidShell off
AnonRequirePassword off
</Anonymous>
<blibli>
houba
</blibli> |
Je veux, pour toutes les lignes allant de :
<Anonymous /home/anonymous_ftp/uploads> |
à
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 :
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 :
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 :
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 :
<blabla>
truc
</blabla>
#<Anonymous /home/anonymous_ftp/uploads>
# User ftp
# Group nogroup
# UserAlias anonymous ftp
# MaxClients 10
# RequireValidShell off
# AnonRequirePassword off
#</Anonymous>
<blibli>
houba
</blibli>
|
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.
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.