SH - 替换文字

时间:2017-07-31 08:21:42

标签: sed replace 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而不是bash,因为我希望代码可以在所有系统中使用,所以我更喜欢遵循该原则的答案

更新

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

错误:

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

2 个答案:

答案 0 :(得分:1)

添加斜杠和双引号:

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

答案 1 :(得分:0)

解决方案可能是:

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

$NEW是路径,所以我需要用其他字符更改“/”,例如“+”

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