【问题标题】:JQ: How do I replace keys and values based on regex match?JQ:如何根据正则表达式匹配替换键和值?
【发布时间】:2018-07-02 22:12:00
【问题描述】:

我有两个问题:

  1. 如何使用 jq 搜索以下划线开头的“名称”字段(如_RDS_PASSWORD)并删除前导下划线(因此变为RDS_PASSWORD

  2. 如何将 jq 用于以下划线开头的“名称”字段(如 _RDS_PASSWORD)并传递值 cGFzc3dvcmQK 的值以通过 base64 解码? (例如:“cGFzc3dvcmQK”| base64 --decode)

输入:

[ 
  { 
    "name": "RDS_DB_NAME", 
    "value": "rds_db_name" 
  }, 
  { 
    "name": "RDS_HOSTNAME", 
    "value": "rds_hostname" 
  }, 
  { 
    "name": "RDS_PORT", 
    "value": "1234" 
  }, 
  { 
    "name": "RDS_USERNAME", 
    "value": "rds_username" 
  }, 
  { 
    "name": "_RDS_PASSWORD", 
    "value": "cGFzc3dvcmQK" 
  } 
]

期望的输出:

[ 
  { 
    "name": "RDS_DB_NAME", 
    "value": "rds_db_name" 
  }, 
  { 
    "name": "RDS_HOSTNAME", 
    "value": "rds_hostname" 
  }, 
  { 
    "name": "RDS_PORT", 
    "value": "1234" 
  }, 
  { 
    "name": "RDS_USERNAME", 
    "value": "rds_username" 
  }, 
  { 
    "name": "RDS_PASSWORD", 
    "value": "password" 
  } 
]

【问题讨论】:

    标签: json key edit jq


    【解决方案1】:

    第一季度

    walk( if type=="object" and has("name") and .name[0:1] == "_"
          then .name |= .[1:]
          else . 
          end) 
    

    如果您的 jq 没有 walk/1,那么您可以升级到比 1.5 更新的 jq 版本,或者包括其 def,可以在 https://github.com/stedolan/jq/blob/master/src/builtin.jq 找到它

    第二季度

    .. | objects | select(has("name") and .name[0:1] == "_") | .value 
    

    如果您确定编码的字符串是 UTF-8 字符串,您可以使用 jq 的 @base64d;否则,使用 -r 选项调用 jq 并将结果通过管道传输到您计划执行的解码器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多