Remplacer parametres dans une ligne avec Sed

Résolu/Fermé
asylum35 Messages postés 6 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 16 mai 2012 - 22 mars 2012 à 15:50
asylum35 Messages postés 6 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 16 mai 2012 - 26 mars 2012 à 16:08
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
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
22 mars 2012 à 15:58
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
asylum35 Messages postés 6 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 16 mai 2012
26 mars 2012 à 08:50
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
26 mars 2012 à 09:14
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
asylum35 Messages postés 6 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 16 mai 2012
26 mars 2012 à 15:54
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
Modifié par zipe31 le 26/03/2012 à 16:08
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
asylum35 Messages postés 6 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 16 mai 2012
26 mars 2012 à 16:08
Ok, ca fonctionne beaucoup mieux!
Merci encore pour tes reponses rapides!
bonne fin de journée
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 mars 2012 à 16:32
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