Mike Farahのyqを使用して配列の値を変更する

Mike Farahのyqを使用して配列の値を変更する

私のyamlファイルには次の人の配列があります(常に要素が1つしかありません)。

persons:
  - name:  mario
    version: 1.0.0
    city: Madrid

yqを使用して都市を別の値に変更するにはどうすればよいですか?

答え1

これを使用してください:

yq -i '.persons[0].city = "Barcelona"' yourfile.yaml

yourfile.yaml「バルセロナ」を適切に変えてください。これにより、city配列の最初の要素の内部値が置き換えられますpersons(存在しない場合は新しく作成されます)。

答え2

あるいは、正確なインデックスはわかりませんが、nameオブジェクトのインデックスがわかっている場合は、次のことを試すことができます。

yq -i '.persons[] |= select(.name == "mario").city = "Barcelona"' yourfile.yaml

その仕事をするyq version 4.25.2

注釈(Kusalananda)に基づいて更新します。 4.3x および 4.4x バージョンの場合は、以下を使用する必要があります。

yq4407 -i '.persons |= map(select(.name == "mario").city = "Barcelona")' city.yaml

関連情報