我有一个文件 ( 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)
使用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作为备份。