在 bash 中查找和替换



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

例如,我需要在文件app.config中找到:{{KEY}}并替换为:php -f generate_key.php的输出。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'

相关内容

  • 没有找到相关文章

最新更新