2017-07-31 42 views
2

我想用另一個替換一個字符串,但是我不能。該代碼是:SH - 替換文字

updatedb 
MCRYPTINI=$(locate mcrypt.ini | grep 'apache2') 
MCRYPTSO=$(locate mcrypt.so | grep "/mcrypt.so") 

OLD="extension=mcrypt.so" 
NEW="extension=$MCRYPTSO" 

echo $MCRYPTINI 
echo $MCRYPTSO 
echo $OLD 
echo $NEW 
echo "'s/$OLD/$NEW' $MCRYPTINI" 

sed -i 's/$OLD/$NEW' $MCRYPTINI 

,其結果是:

sudo sh testScript.sh 
/etc/php5/apache2/conf.d/20-mcrypt.ini 
/usr/lib/php5/20121212/mcrypt.so 
extension=mcrypt.so 
extension=/usr/lib/php5/20121212/mcrypt.so 
's/extension=mcrypt.so/extension=/usr/lib/php5/20121212/mcrypt.so' /etc/php5/apache2/conf.d/20-mcrypt.ini 
sed: -e expression #1, char 11: unterminated `s' command 

因爲我並不需要使用響應「sed的」,但它看起來很容易和好。 我用SH不打壞,因爲我想要的代碼可以在所有的系統使用,所以我更喜歡後面的答案是原則

UPDATE

sed -i "s/$OLD/$NEW/" $MCRYPTINI 

錯誤:

sed: -e expression #1, char 14: unknown option to `s' 
+0

您是否已經嘗試過加入'/'$ NEW'後'在'sed'表達式中? – Danibix

+0

好的,這就解決了問題......但字符串沒有改變 – oootramas

+0

[在sed命令中使用變量]的可能重複(https://stackoverflow.com/questions/11146098/use-a-variable-in -a-sed-command) – Danibix

回答

0

解決方案可能是:

sed -i "s/$OLD/$NEW/" $MCRYPTINI 

$NEW是一個路徑,所以我需要改變 「/」 其他字符,例如 「+」

sed -i "s+$OLD+$NEW+" $MCRYPTINI 
1

添加斜線和雙引號:

sed -i "s/$OLD/$NEW/" file 
+0

最後一個斜槓是正確的,但用雙引號 - > sed:-e表達式#1,字符34:未知選項到's' – oootramas

+0

@oootramas:您的代碼段中缺少最後一個斜槓。而且還需要添加雙引號。 – Guru