正規表現と sed を使用してファイルからテキストを削除する

正規表現と sed を使用してファイルからテキストを削除する

sedを使用してjsonファイルからいくつかの行を削除しようとしています。ご存知のように、私は非常にアマチュアですが、正規表現は正しいと思います。ただし、sedは終了していないアドレスや終了していない 's'コマンドなど、さまざまなエラーを発生させます。

削除するテキストは次のとおりです。

    {
  "trait_type": "Accessories",
  "value": "None"
}

この正規表現を削除する必要があります。 (trait_typeはファイルごとに異なるため、「none」値に基づいてブロック全体を削除する必要があります)

(\{)([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)

オンライン正規表現テスターを使用すると、上記の内容が正しく機能しているようです。

私が使用するコマンド(およびいくつかのバリエーション)は次のとおりです。

sed -e 's/\{([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)//g' 2.json

誰でも助けることができますか?

非常にありがとう

答え1

これがJSONファイルの一部であると仮定すると、次のコマンドはキーとキーを持つすべてのオブジェクトを見つけ、キー値を持つすべてのオブジェクトをjq削除します。trait_typevaluevalueNone

jq 'del( .. |
    select(
      type == "object" and
      has("trait_type") and has("value") and 
      .value == "None"
    ) )' file

上記のコマンドは、ジョブの結果を標準出力に書き込みます。保存するには、出力を新しいファイルにリダイレクトします。

関連情報