1

如何在bash脚本中编写简单的查找和替换,但替换来自运行 PHP 脚本。

例如,我需要在文件中查找:{{KEY}}并替换为:的输出。能做到这一点吗?php -f generate_key.phpapp.configsed

4

3 回答 3

3

我会建议这些方面的东西,而不是上面基于 sed 的解决方案:

KEY="$(php -f generate_key.php)" awk '{gsub("{{KEY}}", ENVIRON["KEY"]);print;}' < app.config > app.config.new && \
mv app.config.new app.config

在 T+20h 编辑使用ENVIRON而不是awk -v VAR=VAL由于后者处理转义序列VAL

主要是因为它执行替换而不对 php 脚本的输出应用任何解释或转换。

如果您的 PHP 脚本的输出包含正斜杠,则基于 sed 的解决方案将失败,并且它们还将替换您的 PHP 脚本输出中存在的各种转义字符(\ns、\ts 等),这可能不是您想要的.

于 2012-12-09T23:33:43.617 回答
2

试试这个

sed -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config

这将替换字符串替换为 PHP 脚本的输出。如果要就地修改 app.config,-i请在命令行中添加选项

sed -i -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config

正如@je4d 所观察到的,如果输出generate_key.php包含正斜杠/,则必须使用另一个分隔符,例如

sed -e "s;{{KEY}};`php -f generate_key.php`;g" app.config
于 2012-12-09T23:21:04.417 回答
0

尝试:

cat app.config|sed 's/{{KEY}}/something/g'
于 2012-12-09T23:12:01.967 回答