如何在bash
脚本中编写简单的查找和替换,但替换来自运行PHP脚本。
例如,我需要找到:{{KEY}}
并替换为文件php -f generate_key.php
中的app.config
输出。 sed
可以做到这一点吗?
答案 0 :(得分: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的解决方案将失败,并且它们还将替换存在于其中的各种转义字符(\n
s,\t
等)您的PHP脚本的输出,可能不是您想要的。
答案 1 :(得分: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
答案 2 :(得分:0)
尝试:
cat app.config|sed 's/{{KEY}}/something/g'