使用正则表达式和 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

上面的命令会将操作结果写入标准输出。将输出重定向到新文件以保存它。

相关内容