【问题标题】:SH - Replace textSH - 替换文本
【发布时间】:2018-01-06 17:16:28
【问题描述】:

我想用另一个字符串替换一个字符串,但我不能。代码是:

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'

【问题讨论】:

  • 您是否已经尝试在$NEW 之后在sed 表达式中添加/
  • 好的,问题解决了...但是字符串没有改变

标签: sed replace sh


【解决方案1】:

添加斜线和双引号:

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

【讨论】:

  • 最后一个斜线是正确的,但带有双引号--> sed: -e expression #1, char 34: unknown option to `s'
  • @oootramas :您的 sn-p 中缺少最后一个斜线。并且还要加上双引号。
【解决方案2】:

解决方案可能是:

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

但是$NEW是路径,所以我需要将“/”换成其他字符,例如“+”

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

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2011-06-11
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2017-11-25
    相关资源
    最近更新 更多