Delete Substring do arquivo JSON (malformado)

2

Estou tentando excluir valores diferentes de um arquivo JSON. Não é bonito e o jq retorna 1 erro de compilação. Eu estou procurando por uma solução a partir da linha de comando (awk / sed).

Aqui estão os meus dados de amostra do meu arquivo json (semelhante ao 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

Todas as entradas podem ser encontradas várias vezes ou também em uma linha.

Depois de usar o substituto, ele deve se parecer com:

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

Eu tentei sed e (awk -F [\ "]), mas não consegui obter alguns resultados úteis. Como isso pode ser feito ?

Atualização: tornei a amostra mais clara ..

Existem 3 tipos diferentes: ...:

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 

Atualização 2: Como isso pode ser feito se os dados da amostra também estiverem em uma linha, como esta:

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

Depois de usar o substituto, ele deve se parecer com:

aaaaaaaabbbbbbbbbcccc"TEST"ccccc
    
por biohell 14.06.2018 / 19:56

1 resposta

1

sed abordagem:

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

A saída:

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

Abordagem de bônus para entrada de string de uma linha:

$ 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
    
por 14.06.2018 / 22:17