Remplacer une ligne par une autre

Fermé
oligh - 18 sept. 2008 à 16:28
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 sept. 2008 à 17:52
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

4 réponses

Shub-Niggurath
18 sept. 2008 à 16:40
Je cherchais le bouton nouveau topic pour poser exactement la même question :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 sept. 2008 à 16:45
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
:-)

Et bien je viens de trouver:

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

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


Merci à jipicy quand meme ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 sept. 2008 à 17:52
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