json - 来自 JSON 数组的 Sed 值
问题描述
我正在尝试使用 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
有人可以帮我解决这个问题吗?我为此苦苦挣扎了很长时间,不知道是什么问题。
解决方案
直接修改数组jq
:
#!/usr/bin/env bash
# Change the selected roles from JSON file
# @params
# $1: The JSON File Path/Name
# $@: Following arguments to replace selectedroles
new_selectedroles () {
# Get file name argument
json_file="$1"
# Remove file-name but keep remaining arguments
shift
# Make a temporary file to store the processed JSON
tmp_json="$(mktemp)"
# Replace selectedroles array content with remaining arguments
jq '.selectedroles=$ARGS.positional' "$json_file" --args "$@" >"$tmp_json"
# Replace the JSON file by its modified version
mv -- "$tmp_json" "$json_file"
}
# Example Usage:
new_selectedroles a.json hello world
运行示例用法后 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": [
"hello",
"world"
],
"alertruleriskkeyaggregation": "MAX",
"authenticator": "index",
"alertruleriskkey": "",
"changed": false
}
推荐阅读
- c++ - SDL 窗口在移动时消失?
- newline - 如何在变量之间有换行符?
- reactjs - onEditSubmit 未正确存储新值
- javascript - 尝试打开具有更高版本号的数据库时触发 onblocked
- php - 如何删除具有两个关系的“反向实体”
- wpf - WPF DataGrid Thumb 不透明度而不分配整个滚动条样式
- javascript - 从 firebase 数据库中获取项目并更新它
- c - 如何在C中将一个char数组的整个值分配给另一个位置的数组以十六进制格式?
- node.js - 如何在节点eshop中为非注册用户存储用户购物车?
- javascript - 如何在随机时间自动显示随机文本然后循环