[Sed] Modifier une ligne dans un .bat

Modifier une ligne dans un .bat [Sed] - Shell/Batch - Programmation

Marsh Posté le 11-12-2007 à 15:26:51    

Je cherche a remplacer une ligne par une autre a l'aide de sed et je galère pour trouver la syntaxe.
 
Je m'explique. J'ai un fichier NETWORK.INI dans lequel je dois modifier une ligne (en fait changer le nom de la machine) a partir de mon autoexec.bat : "computername=123456ghost" où 123456 est une chaîne aléatoire générée dans une variable %rand% par un fichier random.exe qui lui marche bien.
 
Le code concerné dans mon .bat :  

Code :
  1. random 100 | nset rand=$1
  2. ECHO Changement du nom de machine
  3. REM Supprime la ligne contenant la chaine ghost
  4. sed -i '2d' NETWORK.INI
  5. ECHO Ajoute une nouvelle ligne de remplacement
  6. REM sed "/lanroot=/i\computername=ghost/%rand% \n" NETWORK.INI
  7. Pause


 
 :hello:


Message édité par r@phblues le 11-12-2007 à 15:27:18

---------------
Tibet libre !
Reply

Marsh Posté le 11-12-2007 à 15:26:51   

Reply

Marsh Posté le 12-12-2007 à 10:20:15    

ça a l'air puissant sed... tellement puissant qu'on arrive pas a le faire marcher !  :sweat:


---------------
Tibet libre !
Reply

Marsh Posté le 12-12-2007 à 10:30:29    

man sed dans google pour avoir de la doc
 
Sinon je n'ai pas bien compris : tu veux remplacer quelle chaîne par quelle autre ?
Dans ton exemple, tu veux remplacer les lignes contenant "2d" par "computername=...." ?

Reply

Marsh Posté le 12-12-2007 à 10:50:25    

Je l'ai lu la doc, c'est ça qui m'inquiète...
 
Pour simplifier, je veux remplacer :
 
"computername=123456ghost" où 123456 est aléatoire,  
 
par  
 
"computername=%rand%ghost" ou la variable %rand% contient un chiffre aléatoire générée précédemment.


---------------
Tibet libre !
Reply

Marsh Posté le 12-12-2007 à 10:58:45    

Essaie avec :
 

sed "s/computername=[0-9]*ghost/computername=%rand%ghost/" ton_fichier > nouveau_fichier


Message édité par Elmoricq le 12-12-2007 à 11:30:39
Reply

Marsh Posté le 12-12-2007 à 11:40:24    

Ca roule en effet ! Comment résumer 3h de tests en 1 mn! :D
 
Pour faire le remplacement en place dans le fichier, j'ai essayé :  
 

Code :
  1. sed "s/computername=[0-9]*ghost/computername=%rand%ghost/" ton_fichier


mais ca fait le remplacement à l'écran et non dans le fichier...


---------------
Tibet libre !
Reply

Marsh Posté le 12-12-2007 à 11:44:00    

Tu ne peux pas remplacer directement dans le fichier. Même les quelques utilitaires qui te le proposent écrivent en fait dans un fichier temporaire, qu'ils utilisent ensuite pour remplacer l'ancien fichier.
 
Donc le plus simple, c'est de faire le sed > nouveau_fichier, suivi d'un move nouveau_fichier ancien_fichier.

Reply

Marsh Posté le 12-12-2007 à 12:19:44    

Bon tout marche nickel, merci à toi !
 
Pour info voila mon script :

Code :
  1. ECHO Changement du nom de machine en ghost%rand%
  2. sed 's/computername=ghost[0-9]*/computername=ghost%rand%/' NETWORK.INI > NETWORK2.INI
  3. DEL NETWORK.INI
  4. REN NETWORK2.INI NETWORK.INI


Message édité par r@phblues le 12-12-2007 à 12:20:05

---------------
Tibet libre !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed