带单引号的 SED 配置文件

带单引号的 SED 配置文件

我有一个如下所示的配置文件:

        $this->db_host = 'localhost';
        $this->db_port = '3306';
        $this->db_name = 'database';
        $this->db_user = 'root';

我尝试用我设置的 sed 环境变量替换单引号之间的值,但似乎无法正常工作。我的 sed 命令现在看起来像这样。

sed -r -in "s/(db_host *= *\").*/\1$MYSQL_HOST\"/" cfg.php

$MYSQL_HOST-var 包含以下字符串“db”。

成功执行 sed 命令后,配置应如下所示:

        $this->db_host = 'db';
        $this->db_port = '3306';
        $this->db_name = 'database';
        $this->db_user = 'root';

也许你能帮我找出我的错误?

答案1

这将做到这一点:

sed -r "s/(\s*.*db_host =* *').*('.*)/\1$MYSQL_HOST\2/" your_file

其工作方式如下:

  • (我记得上面使用和之间的内容)
  • 具体来说,我记得第一个单引号之前的内容,以及第二个单引号之后的内容。所以我们一点一点地记住了所有内容localhost
  • 然后用记住\1的内容\2替换$MYSQL_HOST

一旦您确认它可以实现您想要的功能,只需添加-i

sed -ri "s/(\s*.*db_host =* *').*('.*)/\1$MYSQL_HOST\2/" your_file

相关内容