我想用另一个字符串替换一个字符串,但我不能。代码是:
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而不是bash,因为我希望代码可以在所有系统中使用,所以我更喜欢遵循该原则的答案
更新
sed -i "s/$OLD/$NEW/" $MCRYPTINI
错误:
sed: -e expression #1, char 14: unknown option to `s'
答案 0 :(得分:1)
添加斜杠和双引号:
sed -i "s/$OLD/$NEW/" file
答案 1 :(得分:0)
解决方案可能是:
sed -i "s/$OLD/$NEW/" $MCRYPTINI
但$NEW
是路径,所以我需要用其他字符更改“/”,例如“+”
sed -i "s+$OLD+$NEW+" $MCRYPTINI