Search code examples
yamlyq

Delete an entry with the key matching regex using yq


I have a json like this:

{
  "sha256key": [
    "438143050f234146300c44ed7e22be698e1e3c8c6bbc89b5c7e6276e8250a3a7"
  ],
  "validkey": [
    "77989d8d29d044112026eae94fe27e9df9ae29d9987d38bcdf470100175def76",
    "3c91a35a4e12eb89c8f25381f29438f270e9b0af1ef0cbcd416581cd7fe06a0e"
  ],
}

I want to remove all entries which have the key started with sha256

Expected result:

{
  "validkey": [
    "77989d8d29d044112026eae94fe27e9df9ae29d9987d38bcdf470100175def76",
    "3c91a35a4e12eb89c8f25381f29438f270e9b0af1ef0cbcd416581cd7fe06a0e"
  ],
}

I have tried

yq 'del(select(.key | test("^sha256.")) this does nothing

I'm using go yq


Solution

  • mikefarah/yq allows you to use * for globbing:

    yq -oj 'del(."sha256*")'
    

    If you want to test by your regular expression, select by matching against the key:

    yq -oj 'del(.[] | select(key | test("^sha256.")))'
    

    Output:

    {
      "validkey": [
        "77989d8d29d044112026eae94fe27e9df9ae29d9987d38bcdf470100175def76",
        "3c91a35a4e12eb89c8f25381f29438f270e9b0af1ef0cbcd416581cd7fe06a0e"
      ]
    }