パターンと一致し、次のキーと値のペアの値を置き換えます。

パターンと一致し、次のキーと値のペアの値を置き換えます。

次のセクションを含むファイルを変更しようとしています。

[ 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

おすすめ記事