【发布时间】:2021-08-29 05:50:21
【问题描述】:
我正在尝试使用 sed 和 jq 从 JSON 对象中的数组更改值。 所以对象看起来像这样:
{
"alertrulemethoddata": "",
"alertruleimportance": 50,
"alertruletype": "any",
"alertrule_any": "filter:\n- query_string:\n query: 'data.win.system.eventID:\"4624\"'",
"alertrulemethodusers": [],
"alertrulemethod": "none",
"alertruleindexpattern": "windows",
"alertruleplaybooks": [],
"alertrulefilename": "windows_logon",
"alertrulename": "windows-logon",
"enable": "Y",
"selectedroles": [
"admin"
],
"alertruleriskkeyaggregation": "MAX",
"authenticator": "index",
"alertruleriskkey": "",
"changed": false
}
我正在尝试将字段“selectedroles”的值更改为脚本参数。 到目前为止我做了什么:
for i in `cat $file`; do
selectedroles=`echo "$i" | jq '._source.selectedroles' | tr -d "[]" | tr -d "\"" | tr -d "\n" | tr -d " "`
for j in $selectedroles; do
sed -i 's/\"selectedroles\":[\"'$j'\"]/\"selectedroles\":[\"'$newname'\"]/g' $file
done
done
有人可以帮我解决这个问题吗? 我为此苦苦挣扎了很长时间,不知道是什么问题。
【问题讨论】:
-
Sed 不理解 JSON 格式。使用 JQ 进行更改,将输出保存到临时文件,然后用它替换原始文件不是更容易吗?
-
不幸的是,我在 sed 中使用了 'alertruleindexpattern'、'alertrulename' 等其他字段,它按预期工作。我想保持一致,所以我尝试使用 sed。