如何提取文件中字段后的数据

如何提取文件中字段后的数据

我的文件中有以下文本

 "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

相关内容