Linux sedコマンドは正規表現を使用して、スペースと特殊文字を含む2行を置き換えます。

Linux sedコマンドは正規表現を使用して、スペースと特殊文字を含む2行を置き換えます。

次のサンプルテキストを含むファイルがあります。

"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"
    }
  }
}

おすすめ記事