シェルでAPI GatewayのOpenAPI(Yaml or JSON)からAWSのベンダープレフィックスを削除する方法
x-amazonで始まるプロパティを一括削除したい時に、node.jsのjs-yamlを使ってプログラム作成するかとか悩んだのですが、Linuxのjq,yqコマンドを使用してシェルで削除することができました。
jqコマンドは意外と奥が深いのでハマります。
以下参考サイトです。
x-amazonで始まるベンダープレフィックスを削除するには、paths
とdelpaths
とstartswith
を使います。
ここでややこしいのは、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 '.'
とします。
a.sh
公式サイト:https://stedolan.github.io/jq/manual/
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント