我有以下.cnf
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress =
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress =
[client]
countryName =
stateOrProvinceName =
localityName =
organizationName =
emailAddress =
commonName =
我只需要使用包含 UPN 和 displayName 的 .csv 文件更新 [client] 部分下的 emailAddress 和 commonName 值。
我还需要循环 csv 中的值并更新一个值,这样我就有机会在中间运行另一个脚本来生成证书。
我根本不熟悉 bash 脚本,只是在构建项目时开始学习。
示例:
foreach $upn in $csv {
update [client].emailAddress = $upn
run_cert_creation_script_here
}
我正在努力:
sed -i "s/emailAddress.*/emailAddress=$upn/" "$CONFIG_FILE"
但这将更新 cnf 中的所有匹配字段。
使用这个正则表达式:
sed -i "/^\[client\]/,/^\[/ s/^emailAddress.*/emailAddress=$upn/" "$CONFIG_FILE"
第一部分搜索 [client] 和下一部分(以 [ 开头)之间的文件部分,然后在该部分中搜索字符串 emailAddress 并替换它。