Forum Programmation.shell Cherche exemple de script pour modifier des lignes dans un fichier

Posté par  .
Étiquettes : aucune
0
9
fév.
2007
Bonjour,

Je cherche un exemple de scripts qui me permettrait de modifier des lignes de plusieurs fichiers

par exemple voici le contenu type de ces fichiers :

ligne1
ligne2

ligne3
errorlog /var/log/chemin1/fichier1
customlog /var/log/chemin2/fichier2

ligne.n


Pour tous les fichiers du même répertoire j'aimerais modifier les lignes
errorlog /var/log/chemin1/fichier1
customlog /var/log/chemin2/fichier2

par
errorlog /NOUVEAU/CHEMIN/fichier1
customlog /NOUVEAU/CHEMIN/fichier2

Auriez vous des exemples de scripts BASH qui font cela

Par avance merci

Pascal
  • # en ruby

    Posté par  . Évalué à 2.

    Salut.
    Si ça peut te servir, voila un script en ruby qui fait le boulot :
    http://www.rorpaste.com/paste/details/694

    Pour traiter tous les fichiers du répertoire courant :
    # ruby le_script.rb /NOUVEAU/CHEMIN
  • # sed

    Posté par  (site web personnel) . Évalué à 5.

    ça c'est un boulot pour sed :

    sed -e 's|errorlog /var/log/fichier1|errorlog /NOUVEAU/CHEMIN|' -e 's|customlog /var/log/chemin2|customlog /NOUVEAU/CHEMIN|' -i fichier
    • [^] # Re: sed

      Posté par  . Évalué à 1.

      Bonjour

      Merci beaucoup pour cette information. Je ne connais en effet pas trop sed

      En fait serait possible de dire à sed de modifier les n premiers caractères d'une chaine ?

      En fait, vous l'avez compris, je veux remplacer le répertoire de logs de tous mes comptes http VHOST.

      Avant j'avais par exemple

      errorlog /home/moncompt/var/mondomaine.com/log/error.log

      il faut savoir que "moncompt" est vraiable d'un compte à un autre mais qu'il fait toujours 8 caractères donc que /home/moncompt/var font toujours 18 caractères

      Je voudrais donc remplacer
      errorlog /home/moncompt/var/mondomaine.com/log/error.log

      par
      errorlog /var/log/apachelogs/mondomaine.com/log/error.log

      Vous voyez que la partie qui est remplacée est une partie de longueur fixe. Les 18 premiers caractères de la chaine "/home/moncompt/var"

      Il y a t'il donc moyen de dire a SED de remplacer seulement ces 18 caractères (qui ne sont pas les premiers de la ligne puisque j'ai avant cela errorlog ou customlog)

      Si cela n'est pas possible je serais obligé de faire un script qui lit tous mes comptes pour trouver le vrai 'moncompt' pour l'inclure dans SED !

      Merci beaucoup par avance !

      Pascal
    • [^] # Re: sed

      Posté par  . Évalué à 1.

      En gros est ce que quelque chose comme cela pourrait fonctionner :

      sed -e 's|errorlog /home/([a-z0-9]{8})/var/(.+)|errorlog /var/log/meslogs/$2|' -i fichier

      Pascal
    • [^] # Re: sed

      Posté par  . Évalué à 1.

      Ok super merci !!!

      SED a en effet fait le boulot sans probleme :

      sed -r -e 's|ErrorLog /home/[a-z0-9]+{7}/var/|ErrorLog /var/log/interworx/|' -e 's|CustomLog /home/[a-z0-9]+{7}/var/|ErrorLog /var/log/interworx/|' -i testsed.conf

      Marche très bien !!!

      Pascal

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.