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