说我有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
中的相应行将被采取行动。
答案 0 :(得分:3)
您可以使用sed
从凭据生成sed脚本,然后将其传输到另一个sed以处理配置:
sed "s%\(.*\): \(.*\)%s/public $\1 = '.*'/public $\1 = '\2'/%" credentials \
| sed -f- config.php