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