我確實有一個 JSON 檔案,如下所示:-
{
"Rules": [
{
"ID": "DMS-FULL-HISTORY-DATA-DEEPARCHIVE-1d",
"Filter": {
"Prefix": "HISTORY/DATA/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 1,
"StorageClass": "DEEP_ARCHIVE"
}
]
},
{
"ID": "FOL-FULL-HISTORY-DATA-DEEPARCHIVE-1d",
"Filter": {
"Prefix": "HISTORY/DATA/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 1,
"StorageClass": "DEEP_ARCHIVE"
}
]
},
{
"ID": "Hello-CDC-delete-30d",
"Filter": {
"Prefix": "CDC/"
},
"Status": "Enabled",
"Expiration": {
"Days": 30
}
}
]
}
我只想查找包含“-FULL-HISTORY-DATA”的規則 ID,然后將其狀態更新為“已禁用”。休息檔案保持不變。有沒有辦法在不使用單個 shell 命令或 sed 打開檔案的情況下進行編輯?
所需的輸出:-
{
"Rules": [
{
"ID": "DMS-FULL-HISTORY-DATA-DEEPARCHIVE-1d",
"Filter": {
"Prefix": "HISTORY/DATA/"
},
"Status": "Disabled",
"Transitions": [
{
"Days": 1,
"StorageClass": "DEEP_ARCHIVE"
}
]
},
{
"ID": "FOL-FULL-HISTORY-DATA-DEEPARCHIVE-1d",
"Filter": {
"Prefix": "HISTORY/DATA/"
},
"Status": "Disabled",
"Transitions": [
{
"Days": 1,
"StorageClass": "DEEP_ARCHIVE"
}
]
},
{
"ID": "Hello-CDC-delete-30d",
"Filter": {
"Prefix": "CDC/"
},
"Status": "Enabled",
"Expiration": {
"Days": 30
}
}
]
}
我曾嘗試使用 sed ,但這是對所有規則 ID 執行更新。
uj5u.com熱心網友回復:
如果jq命令列 JSON 決議器可用,您可以使用以下命令:
jq '.Rules |= map((select(.ID | contains("FULL-HISTORY-DATA"))| .Status = "Disabled" ) // .)'
您可以在線試用。
uj5u.com熱心網友回復:
如果你真的想要一個sed命令,你可以使用以下命令:
sed '/.*FULL-HISTORY-DATA.*/{N;N;N;N;s/"Status": "Enabled"/"Status": "Disabled"/}'
你可以在這里試試。
每當sed遇到包含“FULL歷史-DATA”中的線,它消耗在接下來的4行資料和替換"Status": "Enabled"用"Status": "Disabled"在其中。
這是一個非常脆弱的程序,因為 JSON 格式的任何微不足道的變化都可能導致它失敗,因為在不到 4 行中出現兩次 FULL-HISTORY-DATA(第二次將在第一個被處理時被消耗,不會被由命令正確處理)。
如果您需要可靠和健壯的東西,您將需要使用 JSON 決議器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343646.html
