如何提取文件中欄位後的數據

如何提取文件中欄位後的數據

我的文件中有以下文本

 "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

相關內容