Remplacer une ligne par une autre

oligh -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'ai un problème pour remplacer une ligne par une autre dans un fichier via une commande, j'ai déjà essayé avec sed, sub... Sans succès car ma ligne à remplacer semble complexe.

Ex: Mon fichier est de ce genre:

#variables definitions
$file = "toto.log";
$output = "/tmp/"."$classe".".txt";
$criticite = $ARGV[0];

Je voudrais changer la ligne de la variable output et avoir le fichier suivant:

#variables definitions
$file = "toto.log";
$output = $ARGV[1];
$criticite = $ARGV[0];

Merci de votre aide
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. Shub-Niggurath
     
    Je cherchais le bouton nouveau topic pour poser exactement la même question :)
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    jp@MDK:~/tmpfs ssh$ cat fichier
    #variables definitions
    $file = "toto.log";
    $output = "/tmp/"."$classe".".txt";
    $criticite = $ARGV[0];
    
    jp@MDK:~/tmpfs ssh$ sed '/^\$output/ s/=[^;]*/= \$ARGV[1]/' fichier
    #variables definitions
    $file = "toto.log";
    $output = $ARGV[1];
    $criticite = $ARGV[0];
    
    jp@MDK:~/tmpfs ssh$
    ;-))
    0
  3. oligh
     
    :-)

    Et bien je viens de trouver:

    sed 's|$output.*|$output = $ARGV[1];|' $filename
    0
  4. oligh
     
    Et pour etre hyper complet:

    cat $filename | sed 's|#$output.*|$output = $ARGV[1];|' > $filename

    Merci à jipicy quand meme ;-)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Si tu as une version de sed supérieure à 4.0.5, tu as l'option "-i" qui modifie le fichier en place :
      sed -i.bak 's|#$output.*|$output = $ARGV[1];|' $filename 
      le "-i.bak" fait une sauvegarde du fichier original.
      0