gashirar's blog

ウイスキーがすき/美味しいものがすき/k8sがすき

jq/yqのwalk関数で特定の項目をすべて削除する

はじめに

いろいろなところでお世話になるJSON/YAMLですが、時には特定の項目を一括で削除したいなんて時があります。

個人的なところだとKubernetes周りでJSON/YAMLにお世話になっていますが、Kubernetes 1.18からmetadata配下にmanagedFieldsが追加されました。 kubectl get pod -o yamlなどでyamlを出力して閲覧する際、この項目がなかなかの量出てくるので、そういったものを手軽になんとかしたいなぁという記事です。

実行環境

  • jq 1.6
  • yq 2.10.1

コマンド

jq '. | walk(if type == "object" and has("[項目名]") then del(.[項目名]) else . end)'

または

yq -y '. | walk(if type == "object" and has("[項目名]") then del(.[項目名]) else . end)'

使用例

kubectl get pod -o yaml | yq -y '. | walk(if type == "object" and has("managedFields") then del(.managedFields) else . end)'

K8s特化で高機能なものが欲しい貴方へ

kubectl neat Pluginを使いましょう!

github.com