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を使いましょう!