在bash中查找并替换

时间:2012-12-09 22:56:55

标签: linux bash sed replace

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

例如,我需要找到:{{KEY}}并替换为文件php -f generate_key.php中的app.config输出。 sed可以做到这一点吗?

3 个答案:

答案 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'