2017-10-16 5 views
1

Je crée un script de mise à jour pour un projet, mais je suis confronté à un problème étrange dans sed (SLES 11 PL4). Dans la ligne ci-dessous, bash/sed est tout simplement pas étendre la variable, peu importe ce que je fais:sed non variable en expansion

oldvars=`sed -n '/#### Variables configurables ####/,/#### Variables configurables ####/p' ACCBackup.sh`; sed -i "/#### Variables configurables ####/,/#### Variables configurables ####/c\$oldvars" temp_ACCBackup.sh 

écho aussi la variable fonctionne très bien:

oldvars=`sed -n '/#### Variables configurables ####/,/#### Variables configurables ####/p' ACCBackup.sh`; echo $oldvars         #### Variables configurables #### para='/mnt/BackupBBDD' # DIRECTORIO DESTINO compartido=TRUE # VAMOS A MONTAR ALGUN RECURSO COMPARTIDO? 'TRUE' O 'FALSE' compartido_externo='//IP/recurso' # RECURSO EN MAQUINA EXTERNA compartido_usuario='xxxx' # USUARIO PARA EL RECURSO COMPARTIDO compartido_contrasena='yyyy' # CONTRASENA PARA EL RECURSO COMPARTIDO #### Variables configurables #### 

J'ai essayé de changer l'évasion « \ » , en mettant la variable dans '{}' s, mais aucun n'a aidé ... Cela devient de plus en plus bizarre comme j'essaye de nouvelles options. Le système met simplement le nom de la variable et non son contenu.

Quelqu'un peut-il m'aider s'il vous plaît?

+0

peut être le '' \ '' après que la commande 'c' provoque le problème ... essayez d'utiliser' '\\' 'à la place ... si vous créez une entrée d'échantillon simple et affichez la sortie requise, vous pourriez obtenir mieux help ... Je pense que vous devriez utiliser la commande 'r' pour la robustesse – Sundeep

+1

Pouvez-vous ajouter l'entrée et la sortie réelle/souhaitée, ainsi que le contenu de' oldvars'? –

+1

Le shell remplace correctement la chaîne '\ $ oldvars' par la chaîne' $ oldvars'. Si vous voulez la valeur de la variable, vous ne devriez pas échapper le '$'. –

Répondre

0

Ajoutez un autre \ avant la variable.

\\$oldvars

Lorsque vous avez utilisé seul \ la $ réchappés et $oldvars est devenu une chaîne normale au lieu de la variable.

+0

Bonjour, merci pour la réponse mais j'ai déjà testé en utilisant \\ (oublié de mentionner, désolé) ... Fondamentalement sed ne permettent rien de différent de/c \ ... –

+0

Avez-vous trouvé une solution? "déjà testé en utilisant \\" - a fait ce travail? Si non, alors vous pouvez essayer quelque chose comme 'sed -i"/#### Variables configurables ####/c $ oldvars "temp_ACCBackup.sh' – derp

0

Ou, vous pouvez utiliser le ci-dessous:

OLDVAR=abc 
NEWVAR=xyz 

sed -i 's/'"$OLDVAR"'/'"$NEWVAR"'/g' filename 

Works pour moi chaque fois.