
我的文件中有以下文本
"rules": [
"/Common/Tetration_TCP_L4_ipfix",
"/Common/_sys_https_redirect"
],
"rulesReference": [
{
"link": "https://localhost/mgmt/tm/ltm/rule/~Common~Tetration_TCP_L4_ipfix?ver=12.0.0"
}
"rules": []
目前想要提取裡面的任何東西
/Common/Tetration_TCP_L4_ipfix
/Common/_sys_https_redirect
輸出應該看起來像
Tetration_TCP_L4_ipfix
_sys_https_redirect
但同樣,這可以是任何東西。
答案1
如果您的輸入檔包含不完整的 JSON,而僅包含內部片段(儘管結構有效),您可以恢復遺失的「外部」部分以獲得完整有效的 JSON 結構。
sed
+jq
解決方案:
jq -r '.rules[] | sub("/Common/"; "")' <(sed '1 s/^/{/; $ s/$/]}/' file)
輸出:
Tetration_TCP_L4_ipfix
_sys_https_redirect
當然,如果實際上你有一個有效的 JSON - 只需跳過處理sed
並使用:
jq -r '.rules[] | sub("/Common/"; "")' file
答案2
如果這是一個格式良好的 JSON 檔案:
$ jq -r '..|select(type=="object" and has("rules")).rules|map(split("/")|.[-1])|.[]' file.json
Tetration_TCP_L4_ipfix
_sys_https_redirect
這將用於jq
遞歸查找所有具有鍵的 JSON 物件rules
。對於這些鍵的所有陣列值,它將拆分該值/
並傳回它的最後一個組成部分。
答案3
使用AWK:
awk -F '[/"]' '/"rules": /,/],/{if(/"rules": |],/) next; print $(NF-1)}' file.txt