JSON 파일에서 하위 문자열 제거(잘못된 형식)

JSON 파일에서 하위 문자열 제거(잘못된 형식)

JSON 파일에서 고유한 값을 제거하려고 합니다. 이것은 좋지 않습니다. jq는 컴파일 오류를 반환합니다. 명령줄(awk/sed)에서 솔루션을 찾고 있습니다.

다음은 내 json 파일의 샘플 데이터입니다(docker-compose와 유사).

aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaa  
bbbb"PROTO 9080/tcp 9090/tcp"bbbbb
cccc"TEST PROTO 80 8080"ccccc

모든 항목은 여러 번 또는 한 줄에서 찾을 수 있습니다.

교체를 사용한 후에는 다음과 같아야 합니다.

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

sed 및 (awk -F[\"])를 시도했지만 유용한 결과를 얻을 수 없었습니다. 어떻게 해야 합니까?

업데이트: 예제를 더 명확하게 만들었습니다.

3가지 유형이 있습니다:...:

1: Delete from "MyPorts" to }},
2. Delete "Proto to \"
3. Delete from " PROTO" till one character before \", only if left from Proto is a space 

업데이트 2: 샘플 데이터가 다음과 같은 행에 있는 경우 이를 수행하는 방법:

aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaabbbb"PROTO 9080/tcp 9090/tcp"bbbbbcccc"TEST PROTO 80 8080"ccccc

교체를 사용한 후에는 다음과 같아야 합니다.

aaaaaaaabbbbbbbbbcccc"TEST"ccccc

답변1

sed방법:

sed -E 's~("MyPorts.*\},|"PROTO[^"]+"| +PROTO[^"]+)~~' file

산출:

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

한 줄 문자열 입력을 위한 추가 방법:

$ s='aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaabbbb"PROTO 9080/tcp 9090/tcp"bbbbbcccc"TES^CPROTO 80 8080"ccccc'

$ sed -En 's~("MyPorts.+\},|"PROTO[^"]+"| +PROTO[^"]+)~~gp' <<<"$s"
aaaaaaaabbbbbbbbbcccc"TEST"ccccc

관련 정보