【逆引き】yqのいろいろな使い方

yqといえはyamlファイルをパースして整形するイメージが強いですが、要素の追加・削除・更新もできることを知ったのでまとめます!

要素の追加

.path.key = "value"の形式で追加したい内容を指定すればOK

$ cat << EOF | yq '.path1.key2 = "value2"'
path1:
  key1: value1
EOF

path1:
  key1: value1
  key2: value2

コメントの追加

特定の行にコメントを追加することもできます!

(スクリプトで要素を追加したはいいけど、人目で確認もして欲しいような時にTODOコメントつけるとか)

$ cat << EOF | yq '(.path1.key2 | key) head_comment="TODO Please check this."'
path1:
  key1: value1
  key2: ...
EOF

path1:
  key1: value1
  # TODO Please check this.
  key2: '...'

もしくは

$ cat << EOF | yq '.path1.key2 line_comment="TODO Please check this."'
path1:
  key1: value1
  key2: ...
EOF

path1:
  key1: value1
  key2: '...' # TODO Please check this.

要素の削除

del(削除したいパス)という形式で実行します。

$ cat << EOF | yq 'del(.path1.key2)'
path1:
  key1: value1
  key2: value2
EOF

path1:
  key1: value1

条件に合う親要素を削除する

selectと組み合わせます。以下はvalueにdummyが設定されている配列要素を削除する例です。

$ cat << EOF | yq 'del(.path1[] | select(.[].value == "dummy"))'
path1:
  - key1:
      value: value1
  - key2:
      value: dummy
EOF

path1:
  - key1:
      value: value1

要素の更新

更新したい要素 = "更新後の値"で指定すればOK

$ cat << EOF | yq '.path1.key2 = "updated2"'
path1:
  key1: value1
  key2: value2
EOF

path1:
  key1: value1
  key2: updated2

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です