我的文件中有以下文本
"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