如何在bash
脚本中编写简单的查找和替换,但替换来自运行 PHP 脚本。
例如,我需要在文件中查找:{{KEY}}
并替换为:的输出。能做到这一点吗?php -f generate_key.php
app.config
sed
我会建议这些方面的东西,而不是上面基于 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 脚本输出中存在的各种转义字符(\n
s、\t
s 等),这可能不是您想要的.
试试这个
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
尝试:
cat app.config|sed 's/{{KEY}}/something/g'