파일의 필드 다음에 데이터를 추출하는 방법

파일의 필드 다음에 데이터를 추출하는 방법

내 파일에 다음 텍스트가 있습니다

 "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

관련 정보