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

すべての項目は複数回または1行で見つけることができます。

交換を使用した後は、次のようにする必要があります。

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

1行の文字列を入力するための追加方法:

$ 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

関連情報