ブロック引用
sedを使用して、以下のyamlブロックのipAddressキーの値を変更しようとしています。
networkInterfaces:
- network:
id: network-1111
ipAddress: 192.168.0.0
Cmd:sed -i 's/\(.*ipAddress:.*\)/ipAddress: 192.168.0.1/g' filename.yaml
これは実際には置き換えられますが、networkInterfacesの下にキーを入れ子にすることなく基本ブロックに配置します。
SED以降の出力
networkInterfaces:
- network:
id: network-1834
ipAddress: 192.168.0.1
頑張ったyq
yq -i '.networkInterfaces.ipAddress = "192.168.0.0"' filename.yaml
エラーが発生しました: 'ipAddress'を使用して配列をインデックス化できませんでした(strconv.ParseInt: 'ipAddress'解析:無効な構文)。
IpAddressの値を変更したいです。
ベストアンサー1
この答えはあなたですマイクパラyq
ユーティリティ(表示されるエラーメッセージによるとユーティリティです)。 アンドレイ・キースリュークyq
少し違う。
networkInterfaces
はリストなので、リスト要素にアクセスする場所を選択しないと、リストまたはnetwork
その下にアクセスできません。ipAddress
要素が1つしかない場合は使用できます。
yq '.networkInterfaces[0].network.ipAddress = "192.168.0.1"' file
つまり、リストの最初の要素をipAddress
文字列に設定します。network
networkInterfaces
192.168.0.1
ipAddress
特定の項目に設定するにはid
:
yq '.networkInterfaces[] |= select(.network.id == "network-1111").network.ipAddress = "192.168.0.1"' file
シェル変数を使用してクエリid
と新しいIP番号を保存するには、次の手順を実行します。
id=network-1111 newip=192.168.0.1 yq '.networkInterfaces[] |= select(.network.id == env(id)).network.ipAddress = env(newip)' file