我有一个如下所示的配置文件:
$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