2017-10-16 26 views
1

我创建了一个项目的脚本更新,但我在sed面临一个奇怪的问题(使用SLES 11 PL4)。在下面的线时,bash/sed的根本就不是扩大变量,无论我做什么:SED不扩大可变

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

也呼应变量正常工作:

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 #### 

我试图改变转义“\” ,把变量放在'{}'内,但没有任何帮助......当我尝试新的选项时,这变得越来越we der。系统只会放置变量名称而不是其内容。

有人可以帮我吗?

+0

可能是''\''C'命令导致了问题'后...尝试使用''\\'',而不是...如果你创建了简单的样品输入和显示所需的输出,你可能会得到更好的帮助...我认为你应该使用'r'命令来保证健壮性 – Sundeep

+1

你可以添加输入和实际/期望的输出,以及'oldvars'的内容吗? –

+1

shell正确地用字符串'$ oldvars'替换字符串'\ $ oldvars'。如果你想要变量的值,你不应该逃避'$'。 –

回答

0

变量之前添加另一个\

\\$oldvars

当你使用单\$转义和$oldvars成为一个正常的字符串,而不是变量。

+0

什么比/不同您好,感谢您的答案,但我已经测试使用\\(忘记提及,对不起)...基本上sed不允许任何不同于/ c \ ... –

+0

您是否找到任何解决方案? “已经使用\\测试过了” - 做了这项工作?如果不是,那么你可以尝试像'sed -i“/ ####变量configurables ####/c $ oldvars”temp_ACCBackup.sh' – derp

0

或者,你可以用下面的:每次

OLDVAR=abc 
NEWVAR=xyz 

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

为我工作。