Remplacer parametres dans une ligne avec Sed [Résolu/Fermé]

Signaler
Messages postés
6
Date d'inscription
jeudi 22 mars 2012
Statut
Membre
Dernière intervention
16 mai 2012
-
Messages postés
6
Date d'inscription
jeudi 22 mars 2012
Statut
Membre
Dernière intervention
16 mai 2012
-
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

Messages postés
36297
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
25 janvier 2021
5 869
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
6
Date d'inscription
jeudi 22 mars 2012
Statut
Membre
Dernière intervention
16 mai 2012

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
Messages postés
36297
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
25 janvier 2021
5 869
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
Messages postés
6
Date d'inscription
jeudi 22 mars 2012
Statut
Membre
Dernière intervention
16 mai 2012

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 !
Messages postés
36297
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
25 janvier 2021
5 869
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
Messages postés
6
Date d'inscription
jeudi 22 mars 2012
Statut
Membre
Dernière intervention
16 mai 2012

Ok, ca fonctionne beaucoup mieux!
Merci encore pour tes reponses rapides!
bonne fin de journée
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 165
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci