Remplacement d'une chaine dans une variable
Résolu
sym59
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
La question a déjà été posée mais uniquement au niveau de fichiers... Je vous la pose donc pour une variable =)
J'ai actuellement trois variables :
var1 apparait donc dans var3 et je souhaiterais pouvoir l'échanger avec var2 pour avoir :
J'ai donc pensé à cette ligne de code : (qui ne marche pas)
par contre, celle que j'avais trouvé sur le net marche :
Quelqu'un pourrait m'aider?
Merci !
La question a déjà été posée mais uniquement au niveau de fichiers... Je vous la pose donc pour une variable =)
J'ai actuellement trois variables :
var1=$(echo "chose")
var2=$(echo "truc")
var3=$(echo "je/veux/changer/ce/machin/$var1")
var3 = je/veux/changer/ce/machin/chose
var1 apparait donc dans var3 et je souhaiterais pouvoir l'échanger avec var2 pour avoir :
var3=$(echo "je/veux/changer/ce/machin/$var2")
var3 = je/veux/changer/ce/machin/truc
J'ai donc pensé à cette ligne de code : (qui ne marche pas)
var3=$(echo $var3 | sed 's/$var1/$var2/')
résultat : je/veux/changer/ce/machin/chose
par contre, celle que j'avais trouvé sur le net marche :
var3=$(echo $var3 | sed 's/chose/truc/')
résultat : je/veux/changer/ce/machin/truc
Quelqu'un pourrait m'aider?
Merci !
A voir également:
- Sed remplacer chaine variable
- Remplacer disque dur par ssd - Guide
- Chaine tnt gratuite sur mobile - Guide
- Remplacer word - Guide
- Chaine radio - Télécharger - Médias et Actualité
- Remplacer coco - Accueil - Réseaux sociaux
6 réponses
hello
les $(echo ... sont inutiles
les variables ne sont pas résolues entre ', essayer entre "
les $(echo ... sont inutiles
les variables ne sont pas résolues entre ', essayer entre "
var3=$(echo $var3 | sed "s/$var1/$var2/")
ou en bash
$ var1="chose"
$ var2="truc"
$ var3="je/veux/changer/ce/machin/$var1"
$ echo $var3
je/veux/changer/ce/machin/chose
$ echo ${var3/$var1/$var2}
je/veux/changer/ce/machin/truc
$
En effet, çà marche bien!
sauf dans mon cas =/
enfait, je ne défini pas
La commande
Mais si je souhaite faire différemment :
1 - récupérer le nom qu'il y a entre le 9ieme "/" et le 10ieme "/" par exemple
2 - le remplacer par le contenu d'une variable
Exemple :
1er etape : récupérer chose dans var1
2e etape : le remplacer par var2
Je sais déjà comment compter les "/" mais pas comment les exploiter...
Je pense çà faisable ; mon seul problème, c'est pour retrouver la position du 9ième "/" ; t'aurais une suggestion?
sauf dans mon cas =/
enfait, je ne défini pas
var3="je/veux/changer/ce/machin/$var1"mais plutôt
var3=$(pwd)
La commande
echo $var3m'affiche le même résultat dans les deux cas ; par contre la commande
echo ${var3/$var1/$var2}marche dans le premier cas mais pas dans le deuxième...
Mais si je souhaite faire différemment :
1 - récupérer le nom qu'il y a entre le 9ieme "/" et le 10ieme "/" par exemple
2 - le remplacer par le contenu d'une variable
Exemple :
var3=$(pwd) #je/veux/changer/ce/machin/chose/bidule/chouette
1er etape : récupérer chose dans var1
2e etape : le remplacer par var2
Je sais déjà comment compter les "/" mais pas comment les exploiter...
$ function test_chaine { #Compter le nombre de "/" dans une chaine
$ ChaineA=$(pwd)
$ NbSlashs1=$(echo $(pwd) | tr -d -c "/" | wc -c)
$ }
$ test_chaine
$ echo "Il y a $NbSlashs1 Niveau(x) de sous-arborescence(s)"
Il y a 7 Niveau(x) de sous-arborescence(s)
Je pense çà faisable ; mon seul problème, c'est pour retrouver la position du 9ième "/" ; t'aurais une suggestion?
à mon avis, et d'après ce que j'ai pu déjà voir de ta façon de coder, tu fais fausse-route; tu sembles sur-compliquer les choses pour compenser un problème mal posé, et donc tu colles des rustines sur une chambre à air poreuse.
la prochaine étape, c'est quoi ? variabiliser le nombre de slashes en fonction d'un autre paramètre ?
révise ton algorithme.
la prochaine étape, c'est quoi ? variabiliser le nombre de slashes en fonction d'un autre paramètre ?
révise ton algorithme.
Rectification : çà marche nickel !
Même en déclarant var3=$(pwd)...
J'avais fais une erreur de frappe :-\
Ceci dit, la deuxième solution peut être intéressante ;-)
En tout cas merci beaucoup !
Même en déclarant var3=$(pwd)...
J'avais fais une erreur de frappe :-\
Ceci dit, la deuxième solution peut être intéressante ;-)
En tout cas merci beaucoup !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
$ A="truc"
$ B="je/veux/changer/ce/machin/chose/bidule/chouette"
$ C=$(sed 's|\([^/]*/\)\{6\}\(.*\)|\1|' <<<${B})
$ echo "${B//${C//\//}/${A}}"
je/veux/changer/ce/machin/truc/bidule/chouette
$
avec awk
$ A="truc"
$ B="je/veux/changer/ce/machin/chose/bidule/chouette"
$ C=$(awk -v a="$A" 'BEGIN{FS=OFS="/"} {$6=a; print}' <<<"$B")
$ echo $C
je/veux/changer/ce/machin/truc/bidule/chouette
## ou
$ C=$(awk -v a="$A" 'BEGIN{FS=OFS="/"} {$(NF-2)=a; print}' <<<"$B")
$ echo $C
je/veux/changer/ce/machin/truc/bidule/chouette
$