Remplacer parametres dans une ligne avec Sed

Résolu
asylum35 Messages postés 6 Statut Membre -  
asylum35 Messages postés 6 Statut Membre -
Bonjour,

Dans le but d' automatiser un test, je dois paramétrer un fichier de configuration.
On y retrouve des paramètres de vitesses, d'accélérations, etc...

Je dois plus précisément remplacer 4 valeurs sur cette ligne:

Test1 1 1 2000 2000 1200 1200 700 700 70 70 300 300 300 300 1 2 1 0 0 -1075 -575 1610 -1575 1289 950 950 1 1200 0 0 0 0 0 0 0 0 0 900 1292 1 1 1 1

Ces 4 valeurs correspondent à : accAVide accCharge decVide decCharge

Au lancement du programme de test, une fenêtre demande de rentrer les accélérations AV et AR ( %acceleration% et %deceleration% )

Quelle commande sed, dois je utiliser selon vous pour remplacer:
les 2 valeurs accAvide et accCharge --> %acceleration%
les 2 valeurs decVide et decCharge --> %deceleration%

Merci d'avance

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat plop 
    Test1 1 1 2000 2000 1200 1200 700 700 70 70 300 300 300 300 1 2 1 0 0 -1075 -575 1610 -1575 1289 950 950 1 1200 0 0 0 0 0 0 0 0 0 900 1292 1 1 1 1
    
    $ sed 's/[^ ]*/TOTO/12;s/[^ ]*/TATA/13;s/[^ ]*/TITI/14;s/[^ ]*/TUTU/15' plop 
    Test1 1 1 2000 2000 1200 1200 700 700 70 70 TOTO TATA TITI TUTU 1 2 1 0 0 -1075 -575 1610 -1575 1289 950 950 1 1200 0 0 0 0 0 0 0 0 0 900 1292 1 1 1 1
    
    $ 

    ;-))
    1
    1. asylum35 Messages postés 6 Statut Membre
       
      Merci pour vos commandes!

      J'aimerais que ce remplacement s'effectue à la ligne 12 du fichier.
      J'ai rajouté 12 devant sed, mais ça ne fonctionne pas.
      Une idée, encore une fois? :-)

      Merci
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il faut aussi rajouter des accolades pour signifier que c'est un regroupement de commandes qui ne s'appliqueront qu'à la ligne (ou motif) visée...

      sed '12{s/[^ ]*/TOTO/12;s/[^ ]*/TATA/13;s/[^ ]*/TITI/14;s/[^ ]*/TUTU/15}' plop
      0
    3. asylum35 Messages postés 6 Statut Membre
       
      Merci zipe31;
      du coup voilà mon script:

      read -p 'acceleration? ' $acceleration
      read -p 'deceleration? ' $deceleration
      sed -e '12{s/[^\t]*/$acceleration/12;s/[^\t]*/$acceleration/13;s/[^\t]*/$deceleration/14;s/[^\t]*/$deceleration/15}' Circuit.trk


      mais voila ce que j'ai dans mon fichier à la ligne 12:

      Test1 1 1 2000 1200 2000 1200 300 500 50 50 $acceleration $acceleration $deceleration $deceleration ....

      pas moyen de recuperer les valeurs !
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Vu que tu as des variables dans ton expression, il te faut mettre des quotes doubles autour de l'expression avec "sed", sans quoi les variables ne sont pas interprétées ;-(

      sed -e "12{s/[^\t]*/$acceleration/12;s/[^\t]*/$acceleration/13;s/[^\t]*/$deceleration/14;s/[^\t]*/$deceleration/15}" Circuit.trk
      0
    5. asylum35 Messages postés 6 Statut Membre
       
      Ok, ca fonctionne beaucoup mieux!
      Merci encore pour tes reponses rapides!
      bonne fin de journée
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    $ cat a1
    Test1 1 1 2000 2000 1200 1200 700 700 70 70 300 300 300 300 1 2 1 0 0 -1075 -575 1610 -1575 1289 950 950 1 1200 0 0 0 0 0 0 0 0 0 900 1292 1 1 1 1
    $ acceleration="111 222"
    $ deceleration="333 444"
    $ awk -v var="$acceleration $deceleration" '{split(var,a) ; for(n=1;n<5;n++)$(n+11)=a[n] ; print}' a1
    Test1 1 1 2000 2000 1200 1200 700 700 70 70 111 222 333 444 1 2 1 0 0 -1075 -575 1610 -1575 1289 950 950 1 1200 0 0 0 0 0 0 0 0 0 900 1292 1 1 1 1
    $ 
    1