117 votes

Remplacer une chaîne dans un script shell à l'aide d'une variable

J'utilise le code ci-dessous pour remplacer une chaîne à l'intérieur d'un script shell.

echo $LINE | sed -e 's/12345678/"$replace"/g'

mais il est remplacé par $replace au lieu de la valeur de cette variable.

Quelqu'un peut-il dire ce qui s'est mal passé ?

85voto

ghostdog74 Points 86060

vous pouvez utiliser le shell (bash/ksh).

$ var="12345678abc"
$ replace="test"
$ echo ${var//12345678/$replace}
testabc

34voto

bob Points 736

Non spécifique à la question, mais pour les personnes qui ont besoin du même type de fonctionnalité développé pour la clarté des réponses précédentes :

# create some variables
str="someFileName.foo"
find=".foo"
replace=".bar"
# notice the the str isn't prefixed with $
#    this is just how this feature works :/
result=${str//$find/$replace}
echo $result    
# result is: someFileName.bar

str="someFileName.sally"
find=".foo"
replace=".bar"
result=${str//$find/$replace}
echo $result    
# result is: someFileName.sally because ".foo" was not found

17voto

Nicolae Iotu Points 171

Trouvé une solution gracieuse.

echo ${LINE//12345678/$replace}

9voto

Dave Points 6972

Les guillemets simples sont très forts. Une fois à l'intérieur, il n'y a rien que vous puissiez faire pour invoquer la substitution variable, jusqu'à ce que vous partiez. Utilisez plutôt des guillemets doubles :

echo $LINE | sed -e "s/12345678/$replace/g"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X