Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/11/2020, à 18:18

anthonyB

[RESOLU]commande sed: pourvoir remplacer $ et utiliser des variables

Bonjour,

je voudrais utiliser la commande sed de cette manière:

 sed -i "s/debut_path_qui_ne_change_pas[a-zA-Z\-\_\.\/0-9]*\${year}/debut_path_qui_ne_change_pas$(echo $var_path_new)\${year}/g" fichier 

J'essaie de remplacer la suite du path et le début du fichier par ce qu'il y a dans la variable var_path_new  et je veux arreter le changement à partir de ${year} qui ici n'est pas une variable.

Merci d'avance de votre aide

Dernière modification par anthonyB (Le 05/11/2020, à 19:12)

Hors ligne

#2 Le 04/11/2020, à 18:51

pingouinux

Re : [RESOLU]commande sed: pourvoir remplacer $ et utiliser des variables

Bonjour,
Essaye ceci (j'ai enlevé le -i). Si ça ne convient pas, montre un exemple.

sed  "s/\(debut_path_qui_ne_change_pas\)[-a-zA-Z_.\/0-9]*\(\${year}\)/\1$var_path_new\2/g" fichier

Hors ligne

#3 Le 04/11/2020, à 19:10

Watael

Re : [RESOLU]commande sed: pourvoir remplacer $ et utiliser des variables

dans un cas simple comme celui-ci, je ne m'embête pas :

sed  's/\(debut_path_qui_ne_change_pas\)[-a-zA-Z_.\/0-9]*\(\${year}\)/\1'"$var_path_new"'\2/g' fichier

ça peut devenir illisible quand il y a des imbrication de guillemets et d'apostrophes, mais ce n'est pas le cas ici.

pour sed, le $ indique une fin de ligne, c'est pourquoi, entre apostrophes, il faut quand même le protéger.
est-ce qu'il ne faut pas le protéger davantage entre guillemets ?...

Dernière modification par Watael (Le 04/11/2020, à 19:11)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#4 Le 05/11/2020, à 19:11

anthonyB

Re : [RESOLU]commande sed: pourvoir remplacer $ et utiliser des variables

Merci pour vos réponses les deux méthodes fonctionnent, j'ai du faire une erreur avec le signe d’échappement \ avec $
Et merci pour l'astuce \(chaine \) \1 pour éviter de tout réécrire

Hors ligne

#5 Le 05/11/2020, à 23:36

WW

Re : [RESOLU]commande sed: pourvoir remplacer $ et utiliser des variables

Bonjour,

Il est également possible d'utiliser les expressions régulières étendues avec l'option -E, auquel cas il ne faut plus protéger les parenthèses capturantes.
En revanche d'autres caractères se retrouvent avec une signification comme les accolades qu'il faut donc protéger.

sed -i -Ee 's/(debut_path_qui_ne_change_pas)[-a-zA-Z_.\/0-9]*(\$\{year\})/\1'"${var_path_new}"'\2/g' fichier

A noter l'option -e n'est pas obligatoire mais à l'avantage d'augmenter la portabilité. De plus si plusieurs scripts sont passés à sed l'option devient indispensable.
De même délimiter les variables via ${} est une bonne pratique.

Une autre solution assez classique pour travailler avec des expressions régulières est perl qui utilise des regex encore plus riches :

perl -i -pe 's/(debut_path_qui_ne_change_pas)[-\w.\/\d]*(\$\{year\})/\1'"${var_path_new}"'\2/g' fichier

Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne