내 파일에 다음 텍스트가 있습니다
"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
이는 key 가 있는 모든 JSON 객체를 재귀적으로 찾는 데 사용됩니다 rules
. 이러한 키의 모든 배열 값에 대해 값을 분할 /
하고 마지막 구성 요소를 반환합니다.
답변3
사용AWK:
awk -F '[/"]' '/"rules": /,/],/{if(/"rules": |],/) next; print $(NF-1)}' file.txt