首页 > 解决方案 > 连接 JSON 字段中的字符串并截断最后一个字符

问题描述

我想将 JSON 对象中的字符串(这是一个脚本参数 - 在本例中为“tenant-lta”)添加到字段“alertruleindexpattern”中的值并截断-*或者*如果它位于字符串的末尾。有人可以帮我解决这个问题吗?

JSON对象:

{
  "_index": ".alertrules",
  "_type": "_doc",
  "_id": "tenant-lta_Windows_Admin_task_as_user",
  "_score": 0.07554413,
  "_source": {
    "alertrulemethoddata": "",
    "alertruleimportance": 50,
    "alertruletype": "any",
    "alertrule_any": "filter:\n - query_string:\n     query: \"event_id:4732 AND NOT user.role:admin\"",
    "alertrulemethodusers": [],
    "alertrulemethod": "none",
    "alertruleindexpattern": "winlogbeat-*",
    "alertruleplaybooks": [],
    "alertrulefilename": "tenant-lta_Windows_Admin_task_as_user",
    "alertrulename": "tenant-lta-Windows - Admin task as user",
    "enable": "N",
    "selectedroles": [
      "tenant-lta"
    ],
    "alertruleriskkeyaggregation": "MAX",
    "authenticator": "index",
    "alertruleriskkey": "",
    "changed": false
  }
}

字段中的所需输出alertruleindexpattern

{
    "alertruleindexpattern": "tenant-lta-winlogbeat",
    
}

我的尝试:

ruleindexpattern=`echo "$i" | jq '._source.alertruleindexpattern' | pcregrep -o1 '"(.*?)[-]?\*"$'`
sed -i 's/\"alertruleindexpattern\":\"'$ruleindexpattern'\"/\"alertruleindexpattern\":\"'$tenantname'-'$ruleindexpattern'\"/g' $alert_file

标签: jsonbashjq

解决方案


您可以并且可能应该使用 jq 执行更新,而无需使用其他程序使事情复杂化。

假设使用—-argson tenantname适当的 jq 调用,jq 过滤器将遵循以下几行:

._source.alertruleindexpattern 
|= $tenantname + "-" + sub("-?[*]$";"")

推荐阅读