Bash 脚本:将一个文件中的值替换为另一个文件

Mag*_*cho 2 bash shell-script

我有一个文件 ( one.cnf) 为:

KEY1="value1"
KEY4="VALUE4"
Run Code Online (Sandbox Code Playgroud)

另一个文件 ( two.cnf) 为:

USER_HOST="local"
KEY1="abc"
PASS="lorem"
KEY2="ABC"
KEY4="XYZ"
Run Code Online (Sandbox Code Playgroud)

我想从 中读取相应变量的值one.cnf并替换two.cnf
所以最终two.cnf看起来像

USER_HOST="local"
KEY1="value1"
PASS="lorem"
KEY2="ABC"
KEY4="VALUE4"
Run Code Online (Sandbox Code Playgroud)

Fel*_*xJN 6

使用awk:从文件一读取密钥,然后替换文件二:

awk 'BEGIN{FS=OFS="="}
     NR==FNR {key[$1]=$2 ; next }
     $1 in key {$2=key[$1]}
     1' one.cnf two.cnf
Run Code Online (Sandbox Code Playgroud)

如需更换,请使用sponge

awk '<code>' one.cnf two.cnf | sponge two.cnf
Run Code Online (Sandbox Code Playgroud)

或者 GNUawk就地,但这需要稍微更改代码以确保one.cnf不被清空:

awk -i inplace 'BEGIN{FS=OFS="="}
     NR==FNR {key[$1]=$2}
     FNR!=NR && $1 in key {$2=key[$1]}
     1' one.cnf two.cnf
Run Code Online (Sandbox Code Playgroud)

用于-i inplace -v INPLACE_SUFFIX=.bup将带有 - 后缀的原始文件.bup作为备份。