sed在匹配的字段上用逗号替换来自其他文件的输入

时间:2014-10-16 11:09:51

标签: sed

说我有credentials个文件,其中包含以下内容:

db: my_db
user: my_username
dbprefix: db_prefix

config.php这样的文件:

---

public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'user';
public $password = 'pass';
public $db = 'some_db';
public $dbprefix = 'uk4o9_';

---

我想从credentials逐行阅读并替换 config.php文件中的适当值,匹配左侧的字段 credentials文件中包含变量的config.php

`db` from `credentials` would substitute `$db` value in `configuration.php`
`user` from `credentials` would substitute `$user` value in `configuration.php`
etc..

所以最后我有这样的事情:

---

public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'my_username';
public $password = 'pass';
public $db = 'my_db';
public $dbprefix = 'db_prefix';

---

我想用sed来做,而不是太多的shell脚本,如果是的话 可能的。

我从这样的事情开始,只是为了测试它,如果我可以替换价值 来自credentials的逗号之间的逗号,但我失败了,显然不能 像这样访问反向引用:

read line < credentials; sed -n -e "/\$db\s=\s\'(.*)\'/ {
    s/\1/$line/
    p
}" configuration.php

但是我仍然不知道如何比较:左侧的值 configuration.php中的相应行将被采取行动。

1 个答案:

答案 0 :(得分:3)

您可以使用sed从凭据生成sed脚本,然后将其传输到另一个sed以处理配置:

sed "s%\(.*\): \(.*\)%s/public $\1 = '.*'/public $\1 = '\2'/%" credentials \
| sed -f- config.php