我正在尝试在构建过程中编写一个bash脚本,我们只有一些工具(如grep,sed,awk),我试图用正则表达式匹配的值替换ini文件中的值在另一个。
所以,我匹配像" ^ export ADDRESS = VALUE"在文件export_vars.h中,将VALUE放入名为config.ini的ini文件中,其中包含" ADDRESS = [REPLACE]"。所以,我试图用bash中的一个命令将VALUE替换为[REPLACE]。
我遇到过sed可以获取整个文件并使用
之类的命令将其插入到另一个文件中sed -i -e "/[REPLACE]/r export_vars.h" config.ini
我需要以某种方式优化此命令以仅从export_vars.h读取模式匹配。有谁知道怎么做?
答案 0 :(得分:1)
sed用于单个行上的简单替换,即全部。你需要在awk上查看你想要做的事情。类似的东西:
awk '
BEGIN { FS=OFS="=" }
NR==FNR {
if ( $1 == "export ADDRESS" ) {
value = $2
}
next
}
{ sub(/\[REPLACE\]/,value); print }
' export_vars.h config.ini
当然,未经测试,因为您没有提供可测试的样本输入/输出。
答案 1 :(得分:1)
awk中的另一个人:
$ awk '/ADDRESS/{if(a!="")$0=a;else a=$NF}NR>FNR' export_vars.h config.ini
ADDRESS=VALUE
说明:
$ awk '
/ADDRESS/ { # when ADDRESS is found in record
if(a!="") $0=a # if a is set (from first file), use it
else a=$NF } # otherwise set a with the last field
NR>FNR # print all record of the last file
' export_vars.h config.ini # mind the order
此解决方案不允许=
周围的空间,因为$0
已被其他文件中的$NF
替换。