我有一个配置文件。例如。 的config.cfg
product_name = "test_product"
table_name = "test_table"
我有一个输入文件: input.sql
DROP TABLE cg_company_activity_{{product_name}};
Select * from {{table_name}}
我想编写一个bash脚本,它接收任何输入文件并搜索并替换config.cfg中的变量并返回转换后的文本。
输出:
DROP TABLE cg_company_activity_test_product;
Select * from test_table
关于如何在bash脚本中执行此操作的任何想法?我知道Jinja可以做到这一点,但我想避免python。
答案 0 :(得分:0)
$ awk -F' *= *' 'FNR==NR{gsub(/"/,""); a[$1]=$2;next} {for (k in a)sub("{{" k "}}", a[k])} 1' config.cfg input.sql
DROP TABLE cg_company_activity_test_product;
Select * from test_table
-F' *= *'
告诉awk使用可选空格后跟=
,后跟可选空格作为字段分隔符。
FNR==NR{gsub(/"/,""); a[$1]=$2;next}
在读取第一个文件时,config.cfg,(1)删除所有"
,(2)将第二个字段$2
指定为关联数组a
的值使用键$1
,以及(3)跳过剩余的命令并跳转到next
行重新开始。
for (k in a)sub("{{" k "}}", a[k])
对于数组k
中的每个键a
,在当前行中查找{{
k }}
,并将其替换为关联数组{{1}的值}。
a[k]
这是用于打印线的awk简洁速记。