字符串数组上的字符串替换

String substitution on array of strings

我正在尝试从字符串数组中删除一个子字符串;该数组作为键集从地图中获取。一些传入数据示例:

{
  "appOneVersion": "1.0",
  "appTwoVersion": "1.0",
  "appThreeVersion": "1.0"
}

首先我提取密钥集并制作小写字母:

 $ jq -r 'with_entries( .key |= ascii_downcase) | keys' example.json
[
  "apponeversion",
  "appthreeversion",
  "apptwoversion"
]

然后我试图用 sub("version$"; "") 去除每个元素的 version 部分但是我不太明白如何让它遍历数组而不是 sub 尝试对整个数组进行操作:

$ jq -r 'with_entries( .key |= ascii_downcase) | keys | sub("version$"; "")' example.json
jq: error (at example.json:5): array (["apponever...) cannot be matched, as it is not a string

看起来 map 可以解决问题,您也可以考虑 keys_unsorted:

with_entries( .key |= ascii_downcase )
| keys_unsorted | map(sub("version$"; ""))

当然还有其他方法....

如果你想保留原来的结构:

with_entries( .key |= (ascii_downcase | sub("version$";"")))