次のセクションを含むファイルを変更しようとしています。
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req_distinguished_name ]
countryName = UK
stateOrProvinceName = Scotland
localityName = Glasgow
0.organizationName = aworkplace
organizationalUnitName = eng
commonName = my.webiste.com
emailAddress = [email protected]
common name
最後のセクションのフィールド値を変更したいと思います。
同様の解決策が必要だと思います。このソリューション。
sed '/[シャベル]/,/^$/ s/enable=0/enable=1/'
違いは、置換される値がsedコマンドで一致する式の一部ではないことです。
修正する
コメントに基づいていくつかの説明をすると、目標はそのcommonName
セクションreq_distinguished_name
のフィールドのみを変更することです。例えば
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req_distinguished_name ]
countryName = UK
stateOrProvinceName = Scotland
localityName = Glasgow
0.organizationName = aworkplace
organizationalUnitName = eng
commonName = adifferentvaluetotheoneintheabovesnippet
emailAddress = [email protected]
ベストアンサー1
GNU sed拡張正規表現モードでは、-E
範囲演算子を使用して,
正しいブロックを選択し、そのブロック内でs/正規表現/repl/編集のために右行をゼロにします。
sed -Ee '
/\[ req_distinguished_name ]/,/^$/s/^(\s*commonName\s*=).*/\1__NEWVALUE__/
' file