シェルでAPI GatewayのOpenAPI(Yaml or JSON)からAWSのベンダープレフィックスを削除する方法

シェルでAPI GatewayのOpenAPI(Yaml or JSON)からAWSのベンダープレフィックスを削除する方法

x-amazonで始まるプロパティを一括削除したい時に、node.jsのjs-yamlを使ってプログラム作成するかとか悩んだのですが、Linuxのjq,yqコマンドを使用してシェルで削除することができました。

jqコマンドは意外と奥が深いのでハマります。

以下参考サイトです。

JQ: how can I remove keys based on regex?
I would like to remove all keys that start with "hide". Important to note that the keys may be nested at many levels. I'...

x-amazonで始まるベンダープレフィックスを削除するには、pathsdelpathsstartswithを使います。

ここでややこしいのは、x-amazonで始まるベンダープレフィックスは深い階層だったり、一番上の階層だったりという点です。

そこでpathsを使用します。

startswithはその文字列で始まるプロパティを取得します。

$ cat output.json | jq 'paths | select(.[] | strings | startswith("x-amazon"))'

select(.[-1]~)とすることによってx-amazonで始まるベンダープレフィックスが配列の一番最後に来る配列のみを取得することができます。

select(.[]~)とすると、全部表示されてしまいますので、-1をつけます。

$ cat output.json | jq 'paths | select(.[-1] | strings | startswith("x-amazon"))'

この結果をdelpathsに渡します。

$ cat output.json | jq 'delpaths([paths | select(.[-1] | strings | startswith("x-amazon"))])' | yq -y '.' > output.yaml

これで、ベンダープレフィックスのkey-valueが削除されたoutput.yamlが作成されます。

Yaml ⇔ JSON変換

yqコマンドでyamlからjsonに変換するには

cat input.yaml | yq '.'

とタイプします。

jsonからyamlに変換するには

cat input.json | yq -y '.'

とします。

公式サイト:https://stedolan.github.io/jq/manual/

コメント

タイトルとURLをコピーしました