次のサンプルテキストを含むファイルがあります。
"list-value": {
"object-value": {
"value": "example-value-123"
}
}
リスト値のパターンを値テキスト「example-value-changed-567」と一致させて、値テキスト「example-value-123」を変更したいと思います。
はい
"list-value": {
"object-value": {
"value": "example-value-changed-567"
}
}
値で始まるテキストパターンを一致させたくありません。リスト値からパターンを一致させる必要があります。正規表現を作成しようとしましたが、新しい行を見つけた後にパターンを一致させることはできません。
これまでに試みた正規表現
$ sed -i 's/ [[:space:]]\"list-value\":[[:space:]]{[[:space:]]N;[[:space:]]\"objet-value\"[[:space:]]:[[:space:]]\"[\w+\W+]+\"[[:space:]]} / [[:space:]]\"list-value\":[[:space:]]{[[:space:]]N;[[:space:]]\"objet-value\"[[:space:]]:[[:space:]]\"example-value-changed-567\"[[:space:]]}/g' file.json
上記のコマンドでは、次のエラーが発生します。
sed: 1: "file. ...": command a expects \ followed by text
オンラインで正規表現を作成しましたが、sedコマンドを使用すると機能しません。
\s+"list-value":\s+{\s+"value"\s*:\s+"[\w+\W+]+"\s+}
sedコマンドのより良い効率的な正規表現を見つける必要があります。
ベストアンサー1
JSONドキュメントが次のようにうまく構成されているとします。
{
"list-value": {
"object-value": {
"value": "example-value-123"
}
}
}
jq
この値を変更するために使用できます。
$ jq '."list-value"."object-value".value="example-value-changed-567"' file.json
{
"list-value": {
"object-value": {
"value": "example-value-changed-567"
}
}
}
結果は新しいファイルにリダイレクトでき、変更したい場合は元のファイルを置き換えることができます。
tmpfile=$(mktemp)
cp file.json "$tmpfile"
jq '."list-value"."object-value".value="example-value-changed-567"' "$tmpfile" >file.json
rm "$tmpfile"
。sed
たとえば、入力データに使用される実際の形式または文字エンコーディングは文書と同じです。
{ "list-value": {
"object-value": { "value":
"example-value-123"
}
}
}