【问题标题】:How can I grep JSON record with specific values in Linux如何在 Linux 中使用特定值 grep JSON 记录
【发布时间】:2018-06-14 12:56:57
【问题描述】:

假设我在同一个文件中有这个:

{
  "city": "NY",
  "car": "ford",
  "whatever": "whatever",
  "whatever": "whatever",
  "day": "friday",
  "mood": "good",
  "whatever": "whatever",
  "whatever": "whatever",
}
{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "whatever": "whatever",
  "whatever": "whatever",
  "whatever": "whatever",
  "mood": "good",
  "whatever": "whatever",
}

我怎样才能只用 grep 搜索我有 "day": "monday" 的那条记录? 我实际上已经尝试了很多不同的方法,例如grep -Po '{[^*]+\n.+day\": \"monday.+[^*]}' 所以最终我想得到这个:

{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "whatever": "whatever",
  "whatever": "whatever",
  "whatever": "whatever",
  "mood": "good",
  "whatever": "whatever",
}

【问题讨论】:

  • 既然是JSON,应该考虑使用JSON-specific tools
  • 谢谢你的好提示,我会看看这个
  • Stack Overflow 不是代码编写服务。请出示您的代码。
  • 我实际上已经尝试了很多不同的方法,例如grep -Po '{[^*]+\n.+day\": \"monday.+[^*]}'

标签: regex linux unix grep


【解决方案1】:

尝试使用jq解析JSON文件,例如有这个文件:

[{
    "city": "NY",
    "car": "ford",
    "whatever": "whatever",
    "day": "friday",
    "mood": "good"
}, {
    "whatever": "whatever",
    "city": "NY",
    "car": "ford",
    "day": "monday",
    "mood": "good"
}]

如果您只想获取日期等于星期一的字典:

jq '.[] |  select(.day | contains("monday"))' file.json

它会返回:

{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "mood": "good"
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
相关资源
最近更新 更多