我在一个bash脚本中工作,我必须用jq自定义一个JSON obj.I有。
[
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "df9e8712-98c5-42e4-a020-2e5218404e51",
"last attempt time": "Wed Jun 10 15:27:42 2020 CEST",
"last attempt message": "was successful",
"consecutive failures": 0,
"last success": "Wed Jun 10 15:27:42 2020 CEST",
"NTDS DN": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "TENGIZ\\STEN0002-R2"
},
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
"last attempt time": "Wed Jun 10 15:27:42 2020 CEST",
"last attempt message": "was successful",
"consecutive failures": 0,
"last success": "Wed Jun 10 15:27:42 2020 CEST",
"NTDS DN": "CN=NTDS Settings,CN=SCGPN0002-R2,CN=Servers,CN=POINTE-NOIRE,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "POINTE-NOIRE\\SCGPN0002-R2"
}
]
但我需要所有的键,没有空格和大写与{#JSON_KEY}加上CONSECUTIVE_FAILURES值和IS_DELETED值与" "。
[
{
"{#NC_DN}": "DC=domain,DC=org",
"{#DSA_OBJECTGUID}": "df9e8712-98c5-42e4-a020-2e5218404e51",
"{#LAST_ATTEMPT_TIME}": "Wed Jun 10 15:27:42 2020 CEST",
"{#LAST_ATTEMPT_MESSAGE}": "was successful",
"{#CONSECUTIVE_FAILURES}": "0",
"{#LAST_SUCCESS}": "Wed Jun 10 15:27:42 2020 CEST",
"{#NTDS_DN}": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=domain,DC=org",
"{#IS_DELETED}": "false",
"{#DSA}": "TENGIZ\\STEN0002-R2"
},
{
"{#NC_DN}": "DC=domain,DC=org",
"{#DSA_OBJECTGUID}": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
"{#LAST_ATTEMPT_TIME}": "Wed Jun 10 15:27:42 2020 CEST",
"{#LAST_ATTEMPT_MESSAGE}": "was successful",
"{#CONSECUTIVE_FAILURES}": "0",
"{#LAST_SUCCESS}": "Wed Jun 10 15:27:42 2020 CEST",
"{#NTDS_DN}": "CN=NTDS Settings,CN=SCGPN0002,CN=Servers,CN=NOIRE,CN=Sites,CN=Configuration,DC=domain,DC=org",
"{#IS_DELETED}": "false",
"{#DSA}": "POINTE-NOIRE\\SCGPN0002-R2"
}
]
先谢谢你
谢谢@Cyrus,我找到了一个解决方案......我不这是非常 "优雅",但工作
cat myjsonfile.txt | jq 'walk( if type == "object" then with_entries( .key |= ( gsub( " "; "_") | ascii_upcase | "{#" + . +"}" )) else . end )'
对不起@Cyrus我删除您的建议
以下内容符合要求,但不需要开销。walk
:
map(with_entries( .key |= ( gsub( " "; "_")
| ascii_upcase
| "{#\(.)}" )
| .value |= tostring))
顾名思义。ascii_upcase
只有大写的ASCII字符。
经过几个小时的努力,我不得不改变我的方法......原来的json是。
{
"dsa": {
"options": 1,
"objectGUID": "373f09c9-43ab-489b-9bed-c5357fbe37df",
"invocationId": "e0e99a5d-9162-4c96-93e1-939976bee141"
},
"repsFrom": [
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "df9e8712-98c5-42e4-a020-2e5218404e51",
"last attempt time": "Thu Jun 11 14:27:42 2020 CEST",
"last attempt message": "was successful",
"consecutive failures": 1,
"last success": "Thu Jun 11 14:27:42 2020 CEST",
"NTDS DN": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "TENGIZ\\STEN0002-R2"
},
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
"last attempt time": "Thu Jun 11 14:27:43 2020 CEST",
"last attempt message": "was successful",
"consecutive failures": 1,
"last success": "Thu Jun 11 14:27:43 2020 CEST",
"NTDS DN": "CN=NTDS Settings,CN=SCGPN0002-R2,CN=Servers,CN=POINTE-NOIRE,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "POINTE-NOIRE\\SCGPN0002-R2"
}
],
"repsTo": [
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "86f053eb-36d7-41e4-b944-7bcd9fcb8aaa",
"last attempt time": "NTTIME(0)",
"last attempt message": "was successful",
"consecutive failures": 1,
"last success": "NTTIME(0)",
"NTDS DN": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "MX084\\SMX0840002-R4"
},
{
"NC dn": "DC=company,DC=org",
"DSA objectGUID": "6e98ac67-389b-488a-ae3e-abf36d38ba73",
"last attempt time": "NTTIME(0)",
"last attempt message": "was successful",
"consecutive failures": 0,
"last success": "NTTIME(0)",
"NTDS DN": "CN=NTDS Settings,CN=SCZ0002,CN=Servers,CN=CZ003,CN=Sites,CN=Configuration,DC=company,DC=org",
"is deleted": false,
"DSA": "CZ003\\SCZ0002"
}
],
"NTDSConnections": [
{
"name": "dc6118e7-eca5-4c2c-8248-2e762104e95a",
"remote DN": "CN=NTDS Settings,CN=SPRLIMA0002-R2,CN=Servers,CN=PR-LIMA,CN=Sites,CN=Configuration,DC=company,DC=org",
"options": 1,
"enabled": true,
"dns name": "sprlima0002-r2.company.org",
"replicates NC": []
},
{
"name": "9aa7d28f-5b08-42fe-960a-073c8ebfa4fb",
"remote DN": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
"options": 1,
"enabled": true,
"dns name": "smx0840002-r4.company.org",
"replicates NC": []
},
]
}
这是输出的 samba-tool drs showrepl --json 我需要的是
像这样
[
{
"{#NC_DN}": "DC=company,DC=org",
"{#DSA}_OBJECTGUID}": "df9e8712-98c5-42e4-a020-2e5218404e51",
"{#LAST_ATTEMPT_TIME}": "Thu Jun 11 14:27:42 2020 CEST",
"{#LAST_ATTEMPT_MESSAGE}": "was successful",
"{#CONSECUTIVE_FAILURES}": "1",
"{#LAST_SUCCESS}": "Thu Jun 11 14:27:42 2020 CEST",
"{#NTDS_DN}": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=company,DC=org",
"{#IS_DELETED}": "false",
"{#DSA}": "TENGIZ\\STEN0002-R2"
},
{
"{#NC_DN}": "DC=company,DC=org",
"{#DSA}_OBJECTGUID}": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
"{#LAST_ATTEMPT_TIME}": "Thu Jun 11 14:27:43 2020 CEST",
"{#LAST_ATTEMPT_MESSAGE}": "was successful",
"{#CONSECUTIVE_FAILURES}": "1",
"{#LAST_SUCCESS}": "Thu Jun 11 14:27:43 2020 CEST",
"{#NTDS_DN}": "CN=NTDS Settings,CN=SCGPN0002-R2,CN=Servers,CN=POINTE-NOIRE,CN=Sites,CN=Configuration,DC=company,DC=org",
"{#IS_DELETED}": "false",
"{#DSA}": "POINTE-NOIRE\\SCGPN0002-R2"
},
{
"{#NC_DN}": "DC=company,DC=org",
"{#DSA}_OBJECTGUID}": "86f053eb-36d7-41e4-b944-7bcd9fcb8aaa",
"{#LAST_ATTEMPT_TIME}": "NTTIME(0)",
"{#LAST_ATTEMPT_MESSAGE}": "was successful",
"{#CONSECUTIVE_FAILURES}": "1",
"{#LAST_SUCCESS}": "NTTIME(0)",
"{#NTDS_DN}": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
"{#IS_DELETED}": "false",
"{#DSA}": "MX084\\SMX0840002-R4"
}
]
}
一个包含所有错误的Sigle数组
谢谢!