Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1658 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Utilisation de sed pour mettre en commentaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utilisation de sed pour mettre en commentaire

n°1035053
dave260888
Hmong boy
Posté le 19-04-2008 à 20:27:11  profilanswer
 

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 :
 

Code :
  1. ...
  2. <Anonymous /home/anonymous_ftp/uploads>
  3.     User ftp
  4.     Group nogroup
  5.     UserAlias anonymous ftp
  6.     MaxClients 10
  7.     RequireValidShell off
  8.     AnonRequirePassword off
  9. </Anonymous>


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

mood
Publicité
Posté le 19-04-2008 à 20:27:11  profilanswer
 

n°1035234
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 20-04-2008 à 16:22:45  profilanswer
 

En effet tu choisis pas l'outil le plus simple :D
 
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>


à  

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


<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.
 
 
 :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1035376
chaica
Posté le 21-04-2008 à 08:20:13  profilanswer
 

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

 


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


Message édité par chaica le 21-04-2008 à 08:22:49

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Utilisation de sed pour mettre en commentaire

 

Sujets relatifs
mettre par defaut en 5.1 dans vlcUtilisation d'un vieux pc en média center
utilisation de 2 comptes dyndnsTomcat + Apache + Debian Etch: Howto Dispo
Livre: Unix & Linux Utilisation et administration 2e éditionPas moyen de mettre la wifi, malgré les efforts.RTL 8139
[PS3 Sixaxis] mettre sa manette PS3 sous darwin pour jouer à SNESxconnaitre les ficheirs en cours d'utilisation
Shell : mini script pour l'utilisation de sed[KDE] mettre une icone full size dans kicker ?
Plus de sujets relatifs à : Utilisation de sed pour mettre en commentaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR