如何用Shell命令从外部文件替换Properties中指定Key的取值?
用Shell命令替换Properties文件指定字段的值
需求说明
将原Properties文件中cim.ldap.key字段的取值,替换为外部文件(File 2)中该字段对应的新值。
方法一:sed + 变量提取(直观易读)
先从外部文件提取目标字段的新值,再用sed替换原文件内容:
# 从File 2中提取cim.ldap.key的新值 new_ldap_key=$(grep '^cim.ldap.key=' file2.properties | cut -d'=' -f2-) # 替换原文件的对应字段(Linux系统用-i,macOS需用-i '') sed -i "s/^cim.ldap.key=.*/cim.ldap.key=$new_ldap_key/" original.properties
grep '^cim.ldap.key='精准匹配外部文件中以该字段开头的行cut -d'=' -f2-以=为分隔符,提取等号后的全部内容(兼容值中包含等号的场景)- sed命令用新值直接覆盖原文件中匹配到的字段行
方法二:awk一次性处理(无需中间变量)
用awk同时读取外部文件和原文件,一步完成替换:
awk -F'=' 'NR==FNR{if($1=="cim.ldap.key") new_val=$2; next} $1=="cim.ldap.key"{$2=new_val} 1' file2.properties original.properties > temp.properties && mv temp.properties original.properties
NR==FNR:优先处理第一个输入文件(file2.properties),提取目标字段的值存入new_val- 处理原文件时,匹配到目标字段就替换其值,
1表示打印所有行 - 先输出到临时文件再覆盖原文件,避免直接修改时的文件损坏风险
注意事项
- 假设字段行格式为
key=value,无前后空格;如果存在空格,可调整匹配规则为^[[:space:]]*cim.ldap.key[[:space:]]*= - macOS系统的sed命令需添加空参数:
sed -i '' "s/..."
内容的提问来源于stack exchange,提问作者Arpit Gupta
相关产品推荐
相关产品推荐

