使用属性文件替换配置文件中的所有令牌

时间:2018-06-25 11:34:15

标签: regex bash shell unix

有人可以帮助我为以下情况构建一个UNIX shell脚本吗?

environment.properties:

KEY1=VALUE1
KEY2=VALUE2
KEY3=VALUE3
KEY4=VALUE4
KEY5=VALUE5
KEY6=VALUE6

input.txt:

sample file contains KEY1 
sample file contains KEY2 
sample file contains KEY3 
sample file contains KEY4 
sample file contains KEY5 

output.txt:

sample file contains VALUE1 
sample file contains VALUE2 
sample file contains VALUE3 
sample file contains VALUE4 
sample file contains VALUE5

我想将属性文件应用于我的input.txt,并希望替换所有标记并生成一个输出文件。

1 个答案:

答案 0 :(得分:2)

EDIT2: 也在此处添加了ghoti先生的答案。

awk -F= 'NR==FNR{a[$1]=$2;next} {for(i in a){gsub(i,a[i])}} 1' mapfile inputfile

编辑: 根据@ghoti先生的建议,此处不对字符串KEY字段号进行硬编码,它将查找字符串并进行更改。

awk 'FNR==NR{a[$1]=$2;next} {for(i=1;i<=NF;i++){if($i~/KEY[0-9]+/){$i=a[$i]}}} 1' FS="=" environment.properties  FS=" " input.txt

或在此处使用match的{​​{1}}函数。

awk

这是awk ' FNR==NR{ a[$1]=$2; next} match($0,/KEY[0-9]+/){ print substr($0,1,RSTART-1) a[substr($0,RSTART,RLENGTH)] substr($0,RSTART+RLENGTH); next } 1' FS="=" environment.properties FS=" " input.txt 的任务,请您试一试,如果有帮助,请告诉我。

awk

输出如下。

awk 'FNR==NR{a[$1]=$2;next} {$NF=a[$NF]} 1' FS="=" environment.properties  FS=" " input.txt