Sed 无法正确替换文本

Sed 无法正确替换文本

我正在尝试运行 sed 来替换文件中的某些文本,我将文本拆分开,单独运行 sed 以确保所有内容都正确转义并且正常工作。当我将它们重新组合在一起时,它没有任何变化。有人能告诉我我做错了什么吗?

这是我正在运行的命令

sed -i -e 's/"php"   => \x27\x27,/"php"   => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

它应该改变

"php"   => '',

"php"   => '/opt/remi/php70/root/usr/sbin/php-fpm',

我认为它可能与空格有关,因为代码的缩进方式或我尝试了几件事但没有任何进展。

它位于如下块中:

    $pathToExternals = array(
            "php"   => '',                  // Something like /usr/bin/php. If empty, will be found in PATH.
            "curl"  => '',                  // Something like /usr/bin/curl. If empty, will be found in PATH.
            "gzip"  => '',                  // Something like /usr/bin/gzip. If empty, will be found in PATH.
            "id"    => '',                  // Something like /usr/bin/id. If empty, will be found in PATH.
            "stat"  => '',                  // Something like /usr/bin/stat. If empty, will be found in PATH.
    );

任何指点都将不胜感激!

谢谢

答案1

看来您的源文件中可能有一些制表符,而 sed 命令只假定空白。要执行替换,无论空白是由空格还是制表符组成,请尝试:

sed -i -e 's/"php"[[:space:]]*=>[[:space:]]*\x27\x27,/"php" => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

[[:space:]]*匹配零个或多个任意空格字符。

作为阿尔哈迪斯指出,如果我们对替换命令使用不同的分隔符,则可以避免转义/。例如,我们可以选择|

sed  -e 's|"php"[[:space:]]*=>[[:space:]]*\x27\x27,|"php"   => \x27/opt/remi/php70/root/usr/sbin/php-fpm\x27,|g'

相关内容