2017-10-16 54 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 

爲我工作。